Changeset 2653


Ignore:
Timestamp:
08/03/08 05:30:53 (5 years ago)
Author:
sam
Message:
  • floydsteinberg.c: perform Floyd-Steinberg dithering on a serpentine path.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpipi/trunk/pipi/dither/floydsteinberg.c

    r2637 r2653  
    4545        { 
    4646            float p, q, e; 
     47            int x2 = (y & 1) ? x : w - 1 - x; 
     48            int s = (y & 1) ? 1 : -1; 
    4749 
    48             p = srcdata[y * w + x]; 
     50            p = srcdata[y * w + x2]; 
    4951            q = p < 0.5 ? 0. : 1.; 
    50             dstdata[y * w + x] = q; 
     52            dstdata[y * w + x2] = q; 
    5153 
     54            /* FIXME: according to our 2008 paper, [7 4 5 0] is a better 
     55             * error diffusion kernel for serpentine scan. */ 
    5256            e = p - q; 
    5357            if(x < w - 1) 
    54                 srcdata[y * w + x + 1] += e * .4375; 
     58                srcdata[y * w + x2 + s] += e * .4375; 
    5559            if(y < h - 1) 
    5660            { 
    5761                if(x > 0) 
    58                     srcdata[(y + 1) * w + x - 1] += e * .1875; 
    59                 srcdata[(y + 1) * w + x] += e * .3125; 
     62                    srcdata[(y + 1) * w + x2 - s] += e * .1875; 
     63                srcdata[(y + 1) * w + x2] += e * .3125; 
    6064                if(x < w - 1) 
    61                     srcdata[(y + 1) * w + x + 1] += e * .0625; 
     65                    srcdata[(y + 1) * w + x2 + s] += e * .0625; 
    6266            } 
    6367        } 
Note: See TracChangeset for help on using the changeset viewer.