Browse Source

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

git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@3417 92316355-f0b4-4df1-b90c-862c8a59935f
master
sam 16 years ago
parent
commit
44eca2e75e
1 changed files with 62 additions and 237 deletions
  1. +62
    -237
      pipi/context.c

+ 62
- 237
pipi/context.c View File

@@ -243,32 +243,9 @@ int pipi_command(pipi_context_t *ctx, char const *cmd, ...)
pipi_free(src);
ctx->images[ctx->nimages - 1] = dst;
}
else if(!strcmp(cmd, "boxblur"))
else if(!strcmp(cmd, "boxblur") || !strcmp(cmd, "median"))
{
pipi_image_t *src, *dst;
char const *arg;
va_list ap;
double w, h;

if(ctx->nimages < 1)
return -1;
va_start(ap, cmd);
arg = va_arg(ap, char const *);
va_end(ap);
w = h = atof(arg);
arg = strchr(arg, 'x');
if(arg)
h = atof(arg + 1);
src = ctx->images[ctx->nimages - 1];
dst = pipi_box_blur_ext(src, w, h);
if(dst == NULL)
return -1;
pipi_free(src);
ctx->images[ctx->nimages - 1] = dst;
}
else if(!strcmp(cmd, "median"))
{
pipi_image_t *src, *dst;
pipi_image_t *src, *dst = NULL;
char const *arg;
va_list ap;
double w, h;
@@ -283,41 +260,19 @@ int pipi_command(pipi_context_t *ctx, char const *cmd, ...)
if(arg)
h = atof(arg + 1);
src = ctx->images[ctx->nimages - 1];
dst = pipi_median_ext(src, w, h);
if(dst == NULL)
return -1;
pipi_free(src);
ctx->images[ctx->nimages - 1] = dst;
}
else if(!strcmp(cmd, "geometry"))
{
pipi_image_t *src, *dst;
char const *arg;
va_list ap;
int w, h;

if(ctx->nimages < 1)
return -1;
va_start(ap, cmd);
arg = va_arg(ap, char const *);
va_end(ap);
w = atoi(arg);
arg = strchr(arg, 'x');
if(!arg)
return -1;
h = atoi(arg + 1);
if(w <= 0 || h <= 0)
return -1;
src = ctx->images[ctx->nimages - 1];
dst = pipi_resize(src, w, h);
switch(cmd[0])
{
case 'b': dst = pipi_box_blur_ext(src, w, h); break;
case 'm': dst = pipi_median_ext(src, w, h); break;
}
if(dst == NULL)
return -1;
pipi_free(src);
ctx->images[ctx->nimages - 1] = dst;
}
else if(!strcmp(cmd, "tile"))
else if(!strcmp(cmd, "geometry") || !strcmp(cmd, "tile"))
{
pipi_image_t *src, *dst;
pipi_image_t *src, *dst = NULL;
char const *arg;
va_list ap;
int w, h;
@@ -335,7 +290,11 @@ int pipi_command(pipi_context_t *ctx, char const *cmd, ...)
if(w <= 0 || h <= 0)
return -1;
src = ctx->images[ctx->nimages - 1];
dst = pipi_tile(src, w, h);
switch(cmd[0])
{
case 'g': dst = pipi_resize(src, w, h); break;
case 't': dst = pipi_tile(src, w, h); break;
}
if(dst == NULL)
return -1;
pipi_free(src);
@@ -389,29 +348,10 @@ int pipi_command(pipi_context_t *ctx, char const *cmd, ...)
ctx->images[ctx->nimages - 1] = pipi_crop(tmp, w, h, x, y);
pipi_free(tmp);
}
else if(!strcmp(cmd, "brightness"))
else if(!strcmp(cmd, "brightness") || !strcmp(cmd, "contrast")
|| !strcmp(cmd, "threshold"))
{
pipi_image_t *src, *dst;
char const *arg;
va_list ap;
double val;

if(ctx->nimages < 1)
return -1;
va_start(ap, cmd);
arg = va_arg(ap, char const *);
va_end(ap);
val = atof(arg);
src = ctx->images[ctx->nimages - 1];
dst = pipi_brightness(src, val);
if(dst == NULL)
return -1;
pipi_free(src);
ctx->images[ctx->nimages - 1] = dst;
}
else if(!strcmp(cmd, "contrast"))
{
pipi_image_t *src, *dst;
pipi_image_t *src, *dst = NULL;
char const *arg;
va_list ap;
double val;
@@ -423,27 +363,12 @@ int pipi_command(pipi_context_t *ctx, char const *cmd, ...)
va_end(ap);
val = atof(arg);
src = ctx->images[ctx->nimages - 1];
dst = pipi_contrast(src, val);
if(dst == NULL)
return -1;
pipi_free(src);
ctx->images[ctx->nimages - 1] = dst;
}
else if(!strcmp(cmd, "threshold"))
{
pipi_image_t *src, *dst;
char const *arg;
va_list ap;
double val;

if(ctx->nimages < 1)
return -1;
va_start(ap, cmd);
arg = va_arg(ap, char const *);
va_end(ap);
val = atof(arg);
src = ctx->images[ctx->nimages - 1];
dst = pipi_threshold(src, val);
switch(cmd[0])
{
case 'b': dst = pipi_brightness(src, val); break;
case 'c': dst = pipi_contrast(src, val); break;
case 't': dst = pipi_threshold(src, val); break;
}
if(dst == NULL)
return -1;
pipi_free(src);
@@ -533,21 +458,6 @@ int pipi_command(pipi_context_t *ctx, char const *cmd, ...)
ctx->images[ctx->nimages - 3] = dst;
ctx->nimages -= 2;
}
else if(!strcmp(cmd, "mean"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_mean(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "merge"))
{
pipi_image_t *dst;
@@ -572,134 +482,49 @@ int pipi_command(pipi_context_t *ctx, char const *cmd, ...)
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "min"))
else if(!strcmp(cmd, "mean") || !strcmp(cmd, "min") || !strcmp(cmd, "max")
|| !strcmp(cmd, "add") || !strcmp(cmd, "sub")
|| !strcmp(cmd, "difference") || !strcmp(cmd, "multiply")
|| !strcmp(cmd, "divide") || !strcmp(cmd, "screen")
|| !strcmp(cmd, "overlay"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_min(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "max"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_max(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "add"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_add(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "sub"))
{
pipi_image_t *dst;
pipi_image_t *dst = NULL;

if(ctx->nimages < 2)
return -1;
dst = pipi_sub(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "difference"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_difference(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "multiply"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_multiply(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "divide"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_divide(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "screen"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_screen(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);
pipi_free(ctx->images[ctx->nimages - 1]);
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "overlay"))
{
pipi_image_t *dst;

if(ctx->nimages < 2)
return -1;
dst = pipi_overlay(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
switch(cmd[2])
{
case 'a': dst = pipi_mean(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'n': dst = pipi_min(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'x': dst = pipi_max(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'd': dst = pipi_add(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'b': dst = pipi_sub(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'f': dst = pipi_difference(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'l': dst = pipi_multiply(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'v': dst = pipi_divide(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'r': dst = pipi_screen(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
case 'e': dst = pipi_overlay(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1]);
break;
}
if(dst == NULL)
return -1;
pipi_free(ctx->images[ctx->nimages - 2]);


Loading…
Cancel
Save