Changeset 2696


Ignore:
Timestamp:
Aug 11, 2008, 10:02:16 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • pipi_dither_ordered() now takes two arguments; any image can be used as the ordered dithering matrix. To get the old behaviour, use:

pipi image.png pipi:bayer8 --dither ordered out.png

Location:
libpipi/trunk/pipi
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libpipi/trunk/pipi/context.c

    r2694 r2696  
    9494            dst = pipi_dither_ostromoukhov(src, 1);
    9595        else if(!strcmp(method, "ordered"))
    96             dst = pipi_dither_ordered(src);
     96        {
     97            if(ctx->nimages < 2)
     98                return -1;
     99            dst = pipi_dither_ordered(ctx->images[ctx->nimages - 2], src);
     100            pipi_free(ctx->images[ctx->nimages - 2]);
     101            ctx->nimages--;
     102        }
    97103        else if(!strcmp(method, "random"))
    98104            dst = pipi_dither_random(src);
  • libpipi/trunk/pipi/dither/ordered.c

    r2670 r2696  
    2323#include "pipi_internals.h"
    2424
    25 static const int kernel8x8[8 * 8] =
    26 {
    27    0,  32,   8,  40,   2,  34,  10,  42,
    28   48,  16,  56,  24,  50,  18,  58,  26,
    29   12,  44,   4,  36,  14,  46,   6,  38,
    30   60,  28,  52,  20,  62,  30,  54,  22,
    31    3,  35,  11,  43,   1,  33,   9,  41,
    32   51,  19,  59,  27,  49,  17,  57,  25,
    33   15,  47,   7,  39,  13,  45,   5,  37,
    34   63,  31,  55,  23,  61,  29,  53,  21,
    35 };
    36 
    37 pipi_image_t *pipi_dither_ordered(pipi_image_t *img)
     25pipi_image_t *pipi_dither_ordered(pipi_image_t *img, pipi_image_t *kernel)
    3826{
    3927    pipi_image_t *dst;
    40     pipi_pixels_t *dstp;
    41     float *dstdata;
    42     int x, y, w, h;
     28    pipi_pixels_t *dstp, *kernelp;
     29    float *dstdata, *kerneldata;
     30    int x, y, w, h, kw, kh;
    4331
    4432    w = img->w;
    4533    h = img->h;
     34    kw = kernel->w;
     35    kh = kernel->h;
    4636
    4737    dst = pipi_copy(img);
    4838    dstp = pipi_getpixels(dst, PIPI_PIXELS_Y_F);
    4939    dstdata = (float *)dstp->pixels;
     40
     41    kernelp = pipi_getpixels(kernel, PIPI_PIXELS_Y_F);
     42    kerneldata = (float *)kernelp->pixels;
    5043
    5144    for(y = 0; y < h; y++)
     
    5649
    5750            p = dstdata[y * w + x];
    58             q = p > (1. + kernel8x8[(y % 8) * 8 + (x % 8)]) / 65. ? 1. : 0.;
     51            q = p > kerneldata[(y % kh) * kw + (x % kw)] ? 1. : 0.;
    5952            dstdata[y * w + x] = q;
    6053        }
  • libpipi/trunk/pipi/pipi.h

    r2695 r2696  
    9898
    9999extern pipi_image_t *pipi_dither_floydsteinberg(pipi_image_t *, pipi_scan_t);
    100 extern pipi_image_t *pipi_dither_ordered(pipi_image_t *);
     100extern pipi_image_t *pipi_dither_ordered(pipi_image_t *, pipi_image_t *);
    101101extern pipi_image_t *pipi_dither_random(pipi_image_t *);
    102102extern pipi_image_t *pipi_dither_ostromoukhov(pipi_image_t *, pipi_scan_t);
Note: See TracChangeset for help on using the changeset viewer.