Changeset 2811 for libpipi


Ignore:
Timestamp:
Sep 1, 2008, 1:05:50 AM (12 years ago)
Author:
Sam Hocevar
Message:
  • ordered.c: allow to rotate the dither pattern, using nearest-neighbour rotation interpolation.
Location:
libpipi/trunk/pipi
Files:
3 edited

Legend:

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

    r2790 r2811  
    105105            ctx->nimages--;
    106106        }
    107         else if(!strcmp(method, "ordered"))
     107        else if(!strncmp(method, "ordered", 7))
    108108        {
     109            double angle = .0;
     110            method = strchr(method, ':');
     111            if(method)
     112                angle = atof(method + 1);
    109113            if(ctx->nimages < 2)
    110114                return -1;
    111             dst = pipi_dither_ordered(ctx->images[ctx->nimages - 2], src);
     115            dst = pipi_dither_ordered_ext(ctx->images[ctx->nimages - 2], src,
     116                                          angle);
    112117            pipi_free(ctx->images[ctx->nimages - 2]);
    113118            ctx->nimages--;
  • libpipi/trunk/pipi/dither/ordered.c

    r2790 r2811  
    2121
    2222#include <stdlib.h>
     23#include <math.h>
    2324
    2425#include "pipi.h"
     
    2728pipi_image_t *pipi_dither_ordered(pipi_image_t *img, pipi_image_t *kernel)
    2829{
     30    return pipi_dither_ordered_ext(img, kernel, 0.0);
     31}
     32
     33pipi_image_t *pipi_dither_ordered_ext(pipi_image_t *img, pipi_image_t *kernel,
     34                                      double angle)
     35{
     36    double sint, cost;
    2937    pipi_image_t *dst;
    3038    pipi_pixels_t *dstp, *kernelp;
    3139    float *dstdata, *kerneldata;
    32     int x, y, w, h, kw, kh;
     40    int x, y, w, h, kx, ky, kw, kh;
    3341
    3442    w = img->w;
     
    3644    kw = kernel->w;
    3745    kh = kernel->h;
     46
     47    cost = cos(angle * (M_PI / 180));
     48    sint = sin(angle * (M_PI / 180));
    3849
    3950    dst = pipi_copy(img);
     
    5061            float p, q;
    5162
     63            kx = (int)(cost * x - sint * y + 2 * w * h) % kw;
     64            ky = (int)(cost * y + sint * x + 2 * w * h) % kh;
     65
    5266            p = dstdata[y * w + x];
    53             q = p > kerneldata[(y % kh) * kw + (x % kw)] ? 1. : 0.;
     67            q = p > kerneldata[ky * kw + kx] ? 1. : 0.;
    5468            dstdata[y * w + x] = q;
    5569        }
  • libpipi/trunk/pipi/pipi.h

    r2810 r2811  
    183183                                       pipi_scan_t);
    184184extern pipi_image_t *pipi_dither_ordered(pipi_image_t *, pipi_image_t *);
     185extern pipi_image_t *pipi_dither_ordered_ext(pipi_image_t *, pipi_image_t *,
     186                                             double);
    185187extern pipi_image_t *pipi_dither_halftone(pipi_image_t *, double, double);
    186188extern pipi_image_t *pipi_dither_random(pipi_image_t *);
Note: See TracChangeset for help on using the changeset viewer.