From 363b6032f51b0bcced8aeedd3915d9195e98b050 Mon Sep 17 00:00:00 2001 From: kojima Date: Sun, 24 Oct 2004 05:01:55 +0000 Subject: [PATCH] added RCopyArea --- wrlib/raster.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wrlib/wraster.h | 3 +++ 2 files changed, 75 insertions(+) diff --git a/wrlib/raster.c b/wrlib/raster.c index 2e73a54d..ac57a97e 100644 --- a/wrlib/raster.c +++ b/wrlib/raster.c @@ -385,6 +385,78 @@ RCombineArea(RImage *image, RImage *src, int sx, int sy, unsigned width, void +RCopyArea(RImage *image, RImage *src, int sx, int sy, unsigned width, + unsigned height, int dx, int dy) +{ + int x, y, dwi, swi; + unsigned char *d; + unsigned char *s; + + if(!calculateCombineArea(image, src, &sx, &sy, &width, &height, &dx, &dy)) + return; + + if (!HAS_ALPHA(src)) { + if (!HAS_ALPHA(image)) { + swi = src->width * 3; + dwi = image->width * 3; + + s = src->data + (sy*(int)src->width + sx) * 3; + d = image->data + (dy*(int)image->width + dx) * 3; + + for (y=0; y < height; y++) { + memcpy(d, s, width*3); + d += dwi; + s += swi; + } + } else { + swi = (src->width - width) * 3; + dwi = (image->width - width) * 4; + + s = src->data + (sy*(int)src->width + sx) * 3; + d = image->data + (dy*(int)image->width + dx) * 4; + + for (y=0; y < height; y++) { + for (x=0; x < width; x++) { + *d++ = *s++; + *d++ = *s++; + *d++ = *s++; + d++; + } + d += dwi; + s += swi; + } + } + } else { + int dalpha = HAS_ALPHA(image); + + swi = src->width * 4; + s = src->data + (sy*(int)src->width + sx) * 4; + if (dalpha) { + dwi = image->width * 4; + d = image->data + (dy*(int)image->width + dx) * 4; + } else { + dwi = image->width * 3; + d = image->data + (dy*(int)image->width + dx) * 3; + } + + if (dalpha) { + for (y=0; y < height; y++) { + memcpy(d, s, width*4); + d += dwi; + s += swi; + } + } else { + for (y=0; y < height; y++) { + memcpy(d, s, width*3); + d += dwi; + s += swi; + } + } + } +} + + +void RCombineAreaWithOpaqueness(RImage *image, RImage *src, int sx, int sy, unsigned width, unsigned height, int dx, int dy, int opaqueness) diff --git a/wrlib/wraster.h b/wrlib/wraster.h index 122dc3be..8b07c3fb 100644 --- a/wrlib/wraster.h +++ b/wrlib/wraster.h @@ -347,6 +347,9 @@ void RCombineImages(RImage *image, RImage *src); void RCombineArea(RImage *image, RImage *src, int sx, int sy, unsigned width, unsigned height, int dx, int dy); +void RCopyArea(RImage *image, RImage *src, int sx, int sy, unsigned width, + unsigned height, int dx, int dy); + void RCombineImagesWithOpaqueness(RImage *image, RImage *src, int opaqueness); void RCombineAreaWithOpaqueness(RImage *image, RImage *src, int sx, int sy, -- 2.11.4.GIT