53 lines
1.2 KiB
C
53 lines
1.2 KiB
C
/*
|
|
* incrustator experimental
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "../floatimg.h"
|
|
|
|
#include "incrustator.h"
|
|
|
|
extern int verbosity;
|
|
|
|
/* ---------------------------------------------------------------- */
|
|
int incrustator_0(FloatImg *psrc, FloatImg *pdst,
|
|
int xpos, int ypos, int flags)
|
|
{
|
|
int y, srcpos, dstpos, szl;
|
|
|
|
#if DEBUG_LEVEL
|
|
fprintf(stderr, ">>> %s ( %p %p %d %d 0x%04X\n", __func__, psrc, pdst,
|
|
xpos, ypos, flags);
|
|
#endif
|
|
|
|
if (verbosity > 1) {
|
|
fimg_describe(psrc, "source");
|
|
fimg_describe(pdst, "destination");
|
|
}
|
|
|
|
/* check boudaries */
|
|
if ( (xpos < 0) || (xpos > pdst->width - psrc->width) ||
|
|
(ypos < 0) || (ypos > pdst->height - psrc->height) ) {
|
|
fprintf(stderr, "%s: boudary error\n", __func__);
|
|
return -2;
|
|
}
|
|
|
|
/* move all the data by looping over lines */
|
|
srcpos = 0;
|
|
szl = psrc->width * sizeof(float);
|
|
for (y=0; y<psrc->height; y++) {
|
|
dstpos = ((y + ypos) * pdst->width) + xpos;
|
|
// fprintf(stderr, " %7d %7d %7d\n", y, srcpos, dstpos);
|
|
|
|
memcpy(pdst->R + dstpos, psrc->R + srcpos, szl);
|
|
memcpy(pdst->G + dstpos, psrc->G + srcpos, szl);
|
|
memcpy(pdst->B + dstpos, psrc->B + srcpos, szl);
|
|
srcpos += psrc->width;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
/* ---------------------------------------------------------------- */
|