Changeset 3417


Ignore:
Timestamp:
04/21/09 01:56:56 (4 years ago)
Author:
sam
Message:

context.c: factor some code to gain 180 lines of code.

File:
1 edited

Legend:

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

    r3416 r3417  
    244244        ctx->images[ctx->nimages - 1] = dst; 
    245245    } 
    246     else if(!strcmp(cmd, "boxblur")) 
    247     { 
    248         pipi_image_t *src, *dst; 
     246    else if(!strcmp(cmd, "boxblur") || !strcmp(cmd, "median")) 
     247    { 
     248        pipi_image_t *src, *dst = NULL; 
    249249        char const *arg; 
    250250        va_list ap; 
     
    261261            h = atof(arg + 1); 
    262262        src = ctx->images[ctx->nimages - 1]; 
    263         dst = pipi_box_blur_ext(src, w, h); 
     263        switch(cmd[0]) 
     264        { 
     265            case 'b': dst = pipi_box_blur_ext(src, w, h); break; 
     266            case 'm': dst = pipi_median_ext(src, w, h); break; 
     267        } 
    264268        if(dst == NULL) 
    265269            return -1; 
     
    267271        ctx->images[ctx->nimages - 1] = dst; 
    268272    } 
    269     else if(!strcmp(cmd, "median")) 
    270     { 
    271         pipi_image_t *src, *dst; 
    272         char const *arg; 
    273         va_list ap; 
    274         double w, h; 
    275  
    276         if(ctx->nimages < 1) 
    277             return -1; 
    278         va_start(ap, cmd); 
    279         arg = va_arg(ap, char const *); 
    280         va_end(ap); 
    281         w = h = atof(arg); 
    282         arg = strchr(arg, 'x'); 
    283         if(arg) 
    284             h = atof(arg + 1); 
    285         src = ctx->images[ctx->nimages - 1]; 
    286         dst = pipi_median_ext(src, w, h); 
    287         if(dst == NULL) 
    288             return -1; 
    289         pipi_free(src); 
    290         ctx->images[ctx->nimages - 1] = dst; 
    291     } 
    292     else if(!strcmp(cmd, "geometry")) 
    293     { 
    294         pipi_image_t *src, *dst; 
     273    else if(!strcmp(cmd, "geometry") || !strcmp(cmd, "tile")) 
     274    { 
     275        pipi_image_t *src, *dst = NULL; 
    295276        char const *arg; 
    296277        va_list ap; 
     
    310291            return -1; 
    311292        src = ctx->images[ctx->nimages - 1]; 
    312         dst = pipi_resize(src, w, h); 
    313         if(dst == NULL) 
    314             return -1; 
    315         pipi_free(src); 
    316         ctx->images[ctx->nimages - 1] = dst; 
    317     } 
    318     else if(!strcmp(cmd, "tile")) 
    319     { 
    320         pipi_image_t *src, *dst; 
    321         char const *arg; 
    322         va_list ap; 
    323         int w, h; 
    324  
    325         if(ctx->nimages < 1) 
    326             return -1; 
    327         va_start(ap, cmd); 
    328         arg = va_arg(ap, char const *); 
    329         va_end(ap); 
    330         w = atoi(arg); 
    331         arg = strchr(arg, 'x'); 
    332         if(!arg) 
    333             return -1; 
    334         h = atoi(arg + 1); 
    335         if(w <= 0 || h <= 0) 
    336             return -1; 
    337         src = ctx->images[ctx->nimages - 1]; 
    338         dst = pipi_tile(src, w, h); 
     293        switch(cmd[0]) 
     294        { 
     295            case 'g': dst = pipi_resize(src, w, h); break; 
     296            case 't': dst = pipi_tile(src, w, h); break; 
     297        } 
    339298        if(dst == NULL) 
    340299            return -1; 
     
    390349        pipi_free(tmp); 
    391350    } 
    392     else if(!strcmp(cmd, "brightness")) 
    393     { 
    394         pipi_image_t *src, *dst; 
     351    else if(!strcmp(cmd, "brightness") || !strcmp(cmd, "contrast") 
     352             || !strcmp(cmd, "threshold")) 
     353    { 
     354        pipi_image_t *src, *dst = NULL; 
    395355        char const *arg; 
    396356        va_list ap; 
     
    404364        val = atof(arg); 
    405365        src = ctx->images[ctx->nimages - 1]; 
    406         dst = pipi_brightness(src, val); 
    407         if(dst == NULL) 
    408             return -1; 
    409         pipi_free(src); 
    410         ctx->images[ctx->nimages - 1] = dst; 
    411     } 
    412     else if(!strcmp(cmd, "contrast")) 
    413     { 
    414         pipi_image_t *src, *dst; 
    415         char const *arg; 
    416         va_list ap; 
    417         double val; 
    418  
    419         if(ctx->nimages < 1) 
    420             return -1; 
    421         va_start(ap, cmd); 
    422         arg = va_arg(ap, char const *); 
    423         va_end(ap); 
    424         val = atof(arg); 
    425         src = ctx->images[ctx->nimages - 1]; 
    426         dst = pipi_contrast(src, val); 
    427         if(dst == NULL) 
    428             return -1; 
    429         pipi_free(src); 
    430         ctx->images[ctx->nimages - 1] = dst; 
    431     } 
    432     else if(!strcmp(cmd, "threshold")) 
    433     { 
    434         pipi_image_t *src, *dst; 
    435         char const *arg; 
    436         va_list ap; 
    437         double val; 
    438  
    439         if(ctx->nimages < 1) 
    440             return -1; 
    441         va_start(ap, cmd); 
    442         arg = va_arg(ap, char const *); 
    443         va_end(ap); 
    444         val = atof(arg); 
    445         src = ctx->images[ctx->nimages - 1]; 
    446         dst = pipi_threshold(src, val); 
     366        switch(cmd[0]) 
     367        { 
     368            case 'b': dst = pipi_brightness(src, val); break; 
     369            case 'c': dst = pipi_contrast(src, val); break; 
     370            case 't': dst = pipi_threshold(src, val); break; 
     371        } 
    447372        if(dst == NULL) 
    448373            return -1; 
     
    534459        ctx->nimages -= 2; 
    535460    } 
    536     else if(!strcmp(cmd, "mean")) 
     461    else if(!strcmp(cmd, "merge")) 
    537462    { 
    538463        pipi_image_t *dst; 
     464        char const *arg; 
     465        va_list ap; 
     466        double val; 
    539467 
    540468        if(ctx->nimages < 2) 
    541469            return -1; 
    542         dst = pipi_mean(ctx->images[ctx->nimages - 2], 
    543                         ctx->images[ctx->nimages - 1]); 
     470 
     471        va_start(ap, cmd); 
     472        arg = va_arg(ap, char const *); 
     473        va_end(ap); 
     474        val = atof(arg); 
     475 
     476        dst = pipi_merge(ctx->images[ctx->nimages - 2], 
     477                         ctx->images[ctx->nimages - 1], val); 
    544478        if(dst == NULL) 
    545479            return -1; 
     
    549483        ctx->nimages--; 
    550484    } 
    551     else if(!strcmp(cmd, "merge")) 
    552     { 
    553         pipi_image_t *dst; 
    554         char const *arg; 
    555         va_list ap; 
    556         double val; 
     485    else if(!strcmp(cmd, "mean") || !strcmp(cmd, "min") || !strcmp(cmd, "max") 
     486             || !strcmp(cmd, "add") || !strcmp(cmd, "sub") 
     487             || !strcmp(cmd, "difference") || !strcmp(cmd, "multiply") 
     488             || !strcmp(cmd, "divide") || !strcmp(cmd, "screen") 
     489             || !strcmp(cmd, "overlay")) 
     490    { 
     491        pipi_image_t *dst = NULL; 
    557492 
    558493        if(ctx->nimages < 2) 
    559494            return -1; 
    560  
    561         va_start(ap, cmd); 
    562         arg = va_arg(ap, char const *); 
    563         va_end(ap); 
    564         val = atof(arg); 
    565  
    566         dst = pipi_merge(ctx->images[ctx->nimages - 2], 
    567                          ctx->images[ctx->nimages - 1], val); 
    568         if(dst == NULL) 
    569             return -1; 
    570         pipi_free(ctx->images[ctx->nimages - 2]); 
    571         pipi_free(ctx->images[ctx->nimages - 1]); 
    572         ctx->images[ctx->nimages - 2] = dst; 
    573         ctx->nimages--; 
    574     } 
    575     else if(!strcmp(cmd, "min")) 
    576     { 
    577         pipi_image_t *dst; 
    578  
    579         if(ctx->nimages < 2) 
    580             return -1; 
    581         dst = pipi_min(ctx->images[ctx->nimages - 2], 
    582                        ctx->images[ctx->nimages - 1]); 
    583         if(dst == NULL) 
    584             return -1; 
    585         pipi_free(ctx->images[ctx->nimages - 2]); 
    586         pipi_free(ctx->images[ctx->nimages - 1]); 
    587         ctx->images[ctx->nimages - 2] = dst; 
    588         ctx->nimages--; 
    589     } 
    590     else if(!strcmp(cmd, "max")) 
    591     { 
    592         pipi_image_t *dst; 
    593  
    594         if(ctx->nimages < 2) 
    595             return -1; 
    596         dst = pipi_max(ctx->images[ctx->nimages - 2], 
    597                        ctx->images[ctx->nimages - 1]); 
    598         if(dst == NULL) 
    599             return -1; 
    600         pipi_free(ctx->images[ctx->nimages - 2]); 
    601         pipi_free(ctx->images[ctx->nimages - 1]); 
    602         ctx->images[ctx->nimages - 2] = dst; 
    603         ctx->nimages--; 
    604     } 
    605     else if(!strcmp(cmd, "add")) 
    606     { 
    607         pipi_image_t *dst; 
    608  
    609         if(ctx->nimages < 2) 
    610             return -1; 
    611         dst = pipi_add(ctx->images[ctx->nimages - 2], 
    612                        ctx->images[ctx->nimages - 1]); 
    613         if(dst == NULL) 
    614             return -1; 
    615         pipi_free(ctx->images[ctx->nimages - 2]); 
    616         pipi_free(ctx->images[ctx->nimages - 1]); 
    617         ctx->images[ctx->nimages - 2] = dst; 
    618         ctx->nimages--; 
    619     } 
    620     else if(!strcmp(cmd, "sub")) 
    621     { 
    622         pipi_image_t *dst; 
    623  
    624         if(ctx->nimages < 2) 
    625             return -1; 
    626         dst = pipi_sub(ctx->images[ctx->nimages - 2], 
    627                        ctx->images[ctx->nimages - 1]); 
    628         if(dst == NULL) 
    629             return -1; 
    630         pipi_free(ctx->images[ctx->nimages - 2]); 
    631         pipi_free(ctx->images[ctx->nimages - 1]); 
    632         ctx->images[ctx->nimages - 2] = dst; 
    633         ctx->nimages--; 
    634     } 
    635     else if(!strcmp(cmd, "difference")) 
    636     { 
    637         pipi_image_t *dst; 
    638  
    639         if(ctx->nimages < 2) 
    640             return -1; 
    641         dst = pipi_difference(ctx->images[ctx->nimages - 2], 
    642                               ctx->images[ctx->nimages - 1]); 
    643         if(dst == NULL) 
    644             return -1; 
    645         pipi_free(ctx->images[ctx->nimages - 2]); 
    646         pipi_free(ctx->images[ctx->nimages - 1]); 
    647         ctx->images[ctx->nimages - 2] = dst; 
    648         ctx->nimages--; 
    649     } 
    650     else if(!strcmp(cmd, "multiply")) 
    651     { 
    652         pipi_image_t *dst; 
    653  
    654         if(ctx->nimages < 2) 
    655             return -1; 
    656         dst = pipi_multiply(ctx->images[ctx->nimages - 2], 
    657                             ctx->images[ctx->nimages - 1]); 
    658         if(dst == NULL) 
    659             return -1; 
    660         pipi_free(ctx->images[ctx->nimages - 2]); 
    661         pipi_free(ctx->images[ctx->nimages - 1]); 
    662         ctx->images[ctx->nimages - 2] = dst; 
    663         ctx->nimages--; 
    664     } 
    665     else if(!strcmp(cmd, "divide")) 
    666     { 
    667         pipi_image_t *dst; 
    668  
    669         if(ctx->nimages < 2) 
    670             return -1; 
    671         dst = pipi_divide(ctx->images[ctx->nimages - 2], 
    672                           ctx->images[ctx->nimages - 1]); 
    673         if(dst == NULL) 
    674             return -1; 
    675         pipi_free(ctx->images[ctx->nimages - 2]); 
    676         pipi_free(ctx->images[ctx->nimages - 1]); 
    677         ctx->images[ctx->nimages - 2] = dst; 
    678         ctx->nimages--; 
    679     } 
    680     else if(!strcmp(cmd, "screen")) 
    681     { 
    682         pipi_image_t *dst; 
    683  
    684         if(ctx->nimages < 2) 
    685             return -1; 
    686         dst = pipi_screen(ctx->images[ctx->nimages - 2], 
    687                           ctx->images[ctx->nimages - 1]); 
    688         if(dst == NULL) 
    689             return -1; 
    690         pipi_free(ctx->images[ctx->nimages - 2]); 
    691         pipi_free(ctx->images[ctx->nimages - 1]); 
    692         ctx->images[ctx->nimages - 2] = dst; 
    693         ctx->nimages--; 
    694     } 
    695     else if(!strcmp(cmd, "overlay")) 
    696     { 
    697         pipi_image_t *dst; 
    698  
    699         if(ctx->nimages < 2) 
    700             return -1; 
    701         dst = pipi_overlay(ctx->images[ctx->nimages - 2], 
    702                            ctx->images[ctx->nimages - 1]); 
     495        switch(cmd[2]) 
     496        { 
     497            case 'a': dst = pipi_mean(ctx->images[ctx->nimages - 2], 
     498                                      ctx->images[ctx->nimages - 1]); 
     499                      break; 
     500            case 'n': dst = pipi_min(ctx->images[ctx->nimages - 2], 
     501                                     ctx->images[ctx->nimages - 1]); 
     502                      break; 
     503            case 'x': dst = pipi_max(ctx->images[ctx->nimages - 2], 
     504                                     ctx->images[ctx->nimages - 1]); 
     505                      break; 
     506            case 'd': dst = pipi_add(ctx->images[ctx->nimages - 2], 
     507                                     ctx->images[ctx->nimages - 1]); 
     508                      break; 
     509            case 'b': dst = pipi_sub(ctx->images[ctx->nimages - 2], 
     510                                     ctx->images[ctx->nimages - 1]); 
     511                      break; 
     512            case 'f': dst = pipi_difference(ctx->images[ctx->nimages - 2], 
     513                                            ctx->images[ctx->nimages - 1]); 
     514                      break; 
     515            case 'l': dst = pipi_multiply(ctx->images[ctx->nimages - 2], 
     516                                          ctx->images[ctx->nimages - 1]); 
     517                      break; 
     518            case 'v': dst = pipi_divide(ctx->images[ctx->nimages - 2], 
     519                                        ctx->images[ctx->nimages - 1]); 
     520                      break; 
     521            case 'r': dst = pipi_screen(ctx->images[ctx->nimages - 2], 
     522                                        ctx->images[ctx->nimages - 1]); 
     523                      break; 
     524            case 'e': dst = pipi_overlay(ctx->images[ctx->nimages - 2], 
     525                                         ctx->images[ctx->nimages - 1]); 
     526                      break; 
     527        } 
    703528        if(dst == NULL) 
    704529            return -1; 
Note: See TracChangeset for help on using the changeset viewer.