Bladeren bron

mean.c: rename this file into merge.c and implement pipi_merge() for trivial

image merging.

git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@3411 92316355-f0b4-4df1-b90c-862c8a59935f
master
sam 15 jaren geleden
bovenliggende
commit
80bfef8e57
4 gewijzigde bestanden met toevoegingen van 44 en 6 verwijderingen
  1. +1
    -1
      pipi/Makefile.am
  2. +17
    -5
      pipi/combine/merge.c
  3. +25
    -0
      pipi/context.c
  4. +1
    -0
      pipi/pipi.h

+ 1
- 1
pipi/Makefile.am Bestand weergeven

@@ -60,7 +60,7 @@ render_sources = \

combine_sources = \
combine/rgb.c \
combine/mean.c \
combine/merge.c \
combine/minmax.c \
combine/subadd.c \
combine/mulscreen.c


pipi/combine/mean.c → pipi/combine/merge.c Bestand weergeven

@@ -23,16 +23,23 @@
#include "pipi.h"
#include "pipi_internals.h"

pipi_image_t *pipi_mean(pipi_image_t *img1, pipi_image_t *img2)
pipi_image_t *pipi_merge(pipi_image_t *img1, pipi_image_t *img2, double t)
{
pipi_image_t *dst;
pipi_pixels_t *img1p, *img2p, *dstp;
float *img1data, *img2data, *dstdata;
double t2;
int x, y, w, h;

if(img1->w != img2->w || img1->h != img2->h)
return NULL;

if(t < 0.0)
t = 0.0;
else if(t > 1.0)
t = 1.0;
t2 = 1.0 - t;

w = img1->w;
h = img1->h;

@@ -53,22 +60,27 @@ pipi_image_t *pipi_mean(pipi_image_t *img1, pipi_image_t *img2)

p = img1data[4 * (y * w + x)];
q = img2data[4 * (y * w + x)];
dstdata[4 * (y * w + x)] = (p + q) * 0.5;
dstdata[4 * (y * w + x)] = t * p + t2 * q;

p = img1data[4 * (y * w + x) + 1];
q = img2data[4 * (y * w + x) + 1];
dstdata[4 * (y * w + x) + 1] = (p + q) * 0.5;
dstdata[4 * (y * w + x) + 1] = t * p + t2 * q;

p = img1data[4 * (y * w + x) + 2];
q = img2data[4 * (y * w + x) + 2];
dstdata[4 * (y * w + x) + 2] = (p + q) * 0.5;
dstdata[4 * (y * w + x) + 2] = t * p + t2 * q;

p = img1data[4 * (y * w + x) + 3];
q = img2data[4 * (y * w + x) + 3];
dstdata[4 * (y * w + x) + 3] = (p + q) * 0.5;
dstdata[4 * (y * w + x) + 3] = t * p + t2 * q;
}
}

return dst;
}

pipi_image_t *pipi_mean(pipi_image_t *img1, pipi_image_t *img2)
{
return pipi_merge(img1, img2, 0.5);
}


+ 25
- 0
pipi/context.c Bestand weergeven

@@ -78,6 +78,7 @@ pipi_command_t const *pipi_get_command_list(void)
{ "combine", 0 },
{ "split", 0 },
{ "mean", 0 },
{ "merge", 1 },
{ "min", 0 },
{ "max", 0 },
{ "add", 0 },
@@ -523,6 +524,30 @@ int pipi_command(pipi_context_t *ctx, char const *cmd, ...)
ctx->images[ctx->nimages - 2] = dst;
ctx->nimages--;
}
else if(!strcmp(cmd, "merge"))
{
pipi_image_t *dst;
char const *arg;
va_list ap;
double val;

if(ctx->nimages < 2)
return -1;

va_start(ap, cmd);
arg = va_arg(ap, char const *);
va_end(ap);
val = atof(arg);

dst = pipi_merge(ctx->images[ctx->nimages - 2],
ctx->images[ctx->nimages - 1], val);
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, "min"))
{
pipi_image_t *dst;


+ 1
- 0
pipi/pipi.h Bestand weergeven

@@ -166,6 +166,7 @@ __extern pipi_image_t *pipi_rgb(pipi_image_t *, pipi_image_t *, pipi_image_t *);
__extern pipi_image_t *pipi_red(pipi_image_t *);
__extern pipi_image_t *pipi_green(pipi_image_t *);
__extern pipi_image_t *pipi_blue(pipi_image_t *);
__extern pipi_image_t *pipi_merge(pipi_image_t *, pipi_image_t *, double);
__extern pipi_image_t *pipi_mean(pipi_image_t *, pipi_image_t *);
__extern pipi_image_t *pipi_min(pipi_image_t *, pipi_image_t *);
__extern pipi_image_t *pipi_max(pipi_image_t *, pipi_image_t *);


Laden…
Annuleren
Opslaan