Changeset 2750 for libpipi


Ignore:
Timestamp:
Aug 21, 2008, 2:10:22 AM (12 years ago)
Author:
Sam Hocevar
Message:
  • transform.c: implement pipi_rotate90, pipi_rotate180 and pipi_rotate270.
Location:
libpipi/trunk
Files:
4 edited

Legend:

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

    r2749 r2750  
    343343        pipi_free(tmp);
    344344    }
     345    else if(!strcmp(cmd, "rotate90"))
     346    {
     347        pipi_image_t *tmp;
     348        if(ctx->nimages < 1)
     349            return -1;
     350        tmp = ctx->images[ctx->nimages - 1];
     351        ctx->images[ctx->nimages - 1] = pipi_rotate90(tmp);
     352        pipi_free(tmp);
     353    }
     354    else if(!strcmp(cmd, "rotate180"))
     355    {
     356        pipi_image_t *tmp;
     357        if(ctx->nimages < 1)
     358            return -1;
     359        tmp = ctx->images[ctx->nimages - 1];
     360        ctx->images[ctx->nimages - 1] = pipi_rotate180(tmp);
     361        pipi_free(tmp);
     362    }
     363    else if(!strcmp(cmd, "rotate270"))
     364    {
     365        pipi_image_t *tmp;
     366        if(ctx->nimages < 1)
     367            return -1;
     368        tmp = ctx->images[ctx->nimages - 1];
     369        ctx->images[ctx->nimages - 1] = pipi_rotate270(tmp);
     370        pipi_free(tmp);
     371    }
    345372    else if(!strcmp(cmd, "mean"))
    346373    {
  • libpipi/trunk/pipi/filter/transform.c

    r2749 r2750  
    7979    pipi_pixels_t *srcp, *dstp;
    8080    float *srcdata, *dstdata;
    81     int x, y, w, h, gray;
     81    int y, w, h, gray;
    8282
    8383    w = src->w;
     
    114114}
    115115
     116pipi_image_t *pipi_rotate90(pipi_image_t *src)
     117{
     118    pipi_image_t *dst;
     119    pipi_pixels_t *srcp, *dstp;
     120    float *srcdata, *dstdata;
     121    int x, y, w, h, gray;
     122
     123    w = src->w;
     124    h = src->h;
     125
     126    gray = (src->last_modified == PIPI_PIXELS_Y_F);
     127
     128    srcp = gray ? pipi_getpixels(src, PIPI_PIXELS_Y_F)
     129                : pipi_getpixels(src, PIPI_PIXELS_RGBA_F);
     130    srcdata = (float *)srcp->pixels;
     131
     132    dst = pipi_new(h, w);
     133    dstp = gray ? pipi_getpixels(dst, PIPI_PIXELS_Y_F)
     134                : pipi_getpixels(dst, PIPI_PIXELS_RGBA_F);
     135    dstdata = (float *)dstp->pixels;
     136
     137    for(y = 0; y < h; y++)
     138    {
     139        for(x = 0; x < w; x++)
     140        {
     141            if(gray)
     142            {
     143                dstdata[x * h + y] = srcdata[y * w + w - 1 - x];
     144            }
     145            else
     146            {
     147                dstdata[4 * (x * h + y)]
     148                    = srcdata[4 * (y * w + w - 1 - x)];
     149                dstdata[4 * (x * h + y) + 1]
     150                    = srcdata[4 * (y * w + w - 1 - x) + 1];
     151                dstdata[4 * (x * h + y) + 2]
     152                    = srcdata[4 * (y * w + w - 1 - x) + 2];
     153                dstdata[4 * (x * h + y) + 3]
     154                    = srcdata[4 * (y * w + w - 1 - x) + 3];
     155            }
     156        }
     157    }
     158
     159    return dst;
     160}
     161
     162pipi_image_t *pipi_rotate180(pipi_image_t *src)
     163{
     164    pipi_image_t *dst;
     165    pipi_pixels_t *srcp, *dstp;
     166    float *srcdata, *dstdata;
     167    int x, y, w, h, gray;
     168
     169    w = src->w;
     170    h = src->h;
     171
     172    gray = (src->last_modified == PIPI_PIXELS_Y_F);
     173
     174    srcp = gray ? pipi_getpixels(src, PIPI_PIXELS_Y_F)
     175                : pipi_getpixels(src, PIPI_PIXELS_RGBA_F);
     176    srcdata = (float *)srcp->pixels;
     177
     178    dst = pipi_new(w, h);
     179    dstp = gray ? pipi_getpixels(dst, PIPI_PIXELS_Y_F)
     180                : pipi_getpixels(dst, PIPI_PIXELS_RGBA_F);
     181    dstdata = (float *)dstp->pixels;
     182
     183    for(y = 0; y < h; y++)
     184    {
     185        for(x = 0; x < w; x++)
     186        {
     187            if(gray)
     188            {
     189                dstdata[y * w + x] = srcdata[(h - 1 - y) * w + (w - 1 - x)];
     190            }
     191            else
     192            {
     193                dstdata[4 * (y * w + x)]
     194                     = srcdata[4 * ((h - 1 - y) * w + (w - 1 - x))];
     195                dstdata[4 * (y * w + x) + 1]
     196                     = srcdata[4 * ((h - 1 - y) * w + (w - 1 - x)) + 1];
     197                dstdata[4 * (y * w + x) + 2]
     198                     = srcdata[4 * ((h - 1 - y) * w + (w - 1 - x)) + 2];
     199                dstdata[4 * (y * w + x) + 3]
     200                     = srcdata[4 * ((h - 1 - y) * w + (w - 1 - x)) + 3];
     201            }
     202        }
     203    }
     204
     205    return dst;
     206}
     207
     208pipi_image_t *pipi_rotate270(pipi_image_t *src)
     209{
     210    pipi_image_t *dst;
     211    pipi_pixels_t *srcp, *dstp;
     212    float *srcdata, *dstdata;
     213    int x, y, w, h, gray;
     214
     215    w = src->w;
     216    h = src->h;
     217
     218    gray = (src->last_modified == PIPI_PIXELS_Y_F);
     219
     220    srcp = gray ? pipi_getpixels(src, PIPI_PIXELS_Y_F)
     221                : pipi_getpixels(src, PIPI_PIXELS_RGBA_F);
     222    srcdata = (float *)srcp->pixels;
     223
     224    dst = pipi_new(h, w);
     225    dstp = gray ? pipi_getpixels(dst, PIPI_PIXELS_Y_F)
     226                : pipi_getpixels(dst, PIPI_PIXELS_RGBA_F);
     227    dstdata = (float *)dstp->pixels;
     228
     229    for(y = 0; y < h; y++)
     230    {
     231        for(x = 0; x < w; x++)
     232        {
     233            if(gray)
     234            {
     235                dstdata[x * h + h - 1 - y] = srcdata[y * w + x];
     236            }
     237            else
     238            {
     239                dstdata[4 * (x * h + h - 1 - y)]
     240                    = srcdata[4 * (y * w + x)];
     241                dstdata[4 * (x * h + h - 1 - y) + 1]
     242                    = srcdata[4 * (y * w + x) + 1];
     243                dstdata[4 * (x * h + h - 1 - y) + 2]
     244                    = srcdata[4 * (y * w + x) + 2];
     245                dstdata[4 * (x * h + h - 1 - y) + 3]
     246                    = srcdata[4 * (y * w + x) + 3];
     247            }
     248        }
     249    }
     250
     251    return dst;
     252}
     253
  • libpipi/trunk/pipi/pipi.h

    r2749 r2750  
    130130extern pipi_image_t *pipi_hflip(pipi_image_t *);
    131131extern pipi_image_t *pipi_vflip(pipi_image_t *);
     132extern pipi_image_t *pipi_rotate90(pipi_image_t *);
     133extern pipi_image_t *pipi_rotate180(pipi_image_t *);
     134extern pipi_image_t *pipi_rotate270(pipi_image_t *);
    132135extern pipi_image_t *pipi_median(pipi_image_t *, int);
    133136extern pipi_image_t *pipi_median_ext(pipi_image_t *, int, int);
  • libpipi/trunk/src/pipi.c

    r2749 r2750  
    118118                return EXIT_FAILURE;
    119119        }
     120        else if(!strcmp(argv[0], "--rotate90"))
     121        {
     122            if(pipi_command(ctx, "rotate90") != 0)
     123                return EXIT_FAILURE;
     124        }
     125        else if(!strcmp(argv[0], "--rotate180"))
     126        {
     127            if(pipi_command(ctx, "rotate180") != 0)
     128                return EXIT_FAILURE;
     129        }
     130        else if(!strcmp(argv[0], "--rotate270"))
     131        {
     132            if(pipi_command(ctx, "rotate270") != 0)
     133                return EXIT_FAILURE;
     134        }
    120135        else if(!strcmp(argv[0], "--invert"))
    121136        {
Note: See TracChangeset for help on using the changeset viewer.