Changeset 2747 for libpipi


Ignore:
Timestamp:
Aug 21, 2008, 12:00:23 AM (12 years ago)
Author:
Sam Hocevar
Message:
  • color.c: implement pipi_threshold().
Location:
libpipi/trunk
Files:
4 edited

Legend:

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

    r2746 r2747  
    305305        ctx->images[ctx->nimages - 1] = dst;
    306306    }
     307    else if(!strcmp(cmd, "threshold"))
     308    {
     309        pipi_image_t *src, *dst;
     310        char const *arg;
     311        va_list ap;
     312        double val;
     313
     314        if(ctx->nimages < 1)
     315            return -1;
     316        va_start(ap, cmd);
     317        arg = va_arg(ap, char const *);
     318        va_end(ap);
     319        val = atof(arg);
     320        src = ctx->images[ctx->nimages - 1];
     321        dst = pipi_threshold(src, val);
     322        if(dst == NULL)
     323            return -1;
     324        pipi_free(src);
     325        ctx->images[ctx->nimages - 1] = dst;
     326    }
    307327    else if(!strcmp(cmd, "mean"))
    308328    {
  • libpipi/trunk/pipi/filter/color.c

    r2725 r2747  
    244244}
    245245
     246pipi_image_t *pipi_threshold(pipi_image_t *src, double val)
     247{
     248    pipi_image_t *dst;
     249    pipi_pixels_t *srcp, *dstp;
     250    float *srcdata, *dstdata;
     251    int x, y, w, h, gray;
     252
     253    w = src->w;
     254    h = src->h;
     255
     256    gray = (src->last_modified == PIPI_PIXELS_Y_F);
     257
     258    srcp = gray ? pipi_getpixels(src, PIPI_PIXELS_Y_F)
     259                : pipi_getpixels(src, PIPI_PIXELS_RGBA_F);
     260    srcdata = (float *)srcp->pixels;
     261
     262    dst = pipi_new(w, h);
     263    dstp = gray ? pipi_getpixels(dst, PIPI_PIXELS_Y_F)
     264                : pipi_getpixels(dst, PIPI_PIXELS_RGBA_F);
     265    dstdata = (float *)dstp->pixels;
     266
     267    for(y = 0; y < h; y++)
     268    {
     269        for(x = 0; x < w; x++)
     270        {
     271            if(gray)
     272            {
     273                dstdata[y * w + x] = srcdata[y * w + x] < val ? 0. : 1.;
     274            }
     275            else
     276            {
     277                int d = 4 * (y * w + x);
     278
     279                dstdata[d] = srcdata[d] < val ? 0. : 1.;
     280                dstdata[d + 1] = srcdata[d + 1] < val ? 0. : 1.;
     281                dstdata[d + 2] = srcdata[d + 2] < val ? 0. : 1.;
     282                dstdata[d + 3] = srcdata[d + 3] < val ? 0. : 1.;
     283            }
     284        }
     285    }
     286
     287    return dst;
     288}
     289
  • libpipi/trunk/pipi/pipi.h

    r2746 r2747  
    127127extern pipi_image_t *pipi_autocontrast(pipi_image_t *);
    128128extern pipi_image_t *pipi_invert(pipi_image_t *);
     129extern pipi_image_t *pipi_threshold(pipi_image_t *, double);
    129130extern pipi_image_t *pipi_median(pipi_image_t *, int);
    130131extern pipi_image_t *pipi_median_ext(pipi_image_t *, int, int);
  • libpipi/trunk/src/pipi.c

    r2746 r2747  
    113113                return EXIT_FAILURE;
    114114        }
     115        else if(!strcmp(argv[0], "--threshold"))
     116        {
     117            if(argv[1] == NULL)
     118                return EXIT_FAILURE;
     119            if(pipi_command(ctx, "threshold", argv[1]) != 0)
     120                return EXIT_FAILURE;
     121            argv++;
     122        }
    115123        else if(!strcmp(argv[0], "--dilate"))
    116124        {
Note: See TracChangeset for help on using the changeset viewer.