From b974bd7e78e6922072c5a893d5fa0d4365dd31b8 Mon Sep 17 00:00:00 2001 From: kojima Date: Tue, 7 Mar 2000 01:12:12 +0000 Subject: [PATCH] fixed image clearing --- wrlib/misc.c | 28 ++++++++++++++++++++++++++++ wrlib/png.c | 5 ++--- wrlib/raster.c | 8 ++++---- wrlib/view.c | 20 ++++++++++++++++++-- 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/wrlib/misc.c b/wrlib/misc.c index 516b4ab0..d2aeab14 100644 --- a/wrlib/misc.c +++ b/wrlib/misc.c @@ -91,6 +91,33 @@ RBevelImage(RImage *image, int bevel_type) void RClearImage(RImage *image, RColor *color) { + if (image->format == RRGBAFormat) { + unsigned char *d = image->data; + int i; + + for (i = 0; i < image->width; i++) { + *d++ = color->red; + *d++ = color->green; + *d++ = color->blue; + *d++ = color->alpha; + } + for (i = 1; i < image->height; i++, d += image->width*4) { + memcpy(d, image->data, image->width*4); + } + } else { + unsigned char *d = image->data; + int i; + + for (i = 0; i < image->width; i++) { + *d++ = color->red; + *d++ = color->green; + *d++ = color->blue; + } + for (i = 1; i < image->height; i++, d += image->width*3) { + memcpy(d, image->data, image->width*3); + } + } +#if 0 if (color->alpha==255) { if (image->format == RRGBAFormat) { unsigned char *d = image->data; @@ -144,6 +171,7 @@ RClearImage(RImage *image, RColor *color) } } } +#endif } const char* diff --git a/wrlib/png.c b/wrlib/png.c index fa0c83c7..4c83542b 100644 --- a/wrlib/png.c +++ b/wrlib/png.c @@ -154,9 +154,8 @@ RLoadPNG(RContext *context, char *file, int index) if (sgamma==0) sgamma = 1; } else { - /* no, this is correct. Old gimp versions are broken and save wrong - * data. Upgrade gimp. */ - sgamma = 2.0; + /* blah */ + sgamma = 2.2; } if (png_get_gAMA(png, pinfo, &gamma)) diff --git a/wrlib/raster.c b/wrlib/raster.c index b7742096..95862c7e 100644 --- a/wrlib/raster.c +++ b/wrlib/raster.c @@ -331,12 +331,12 @@ RCombineArea(RImage *image, RImage *src, int sx, int sy, unsigned width, swi = (src->width - width) * 4; s = src->data + (sy*(int)src->width + sx) * 4; - if (!HAS_ALPHA(image)) { - dwi = (image->width - width) * 3; - d = image->data + (dy*(int)image->width + dx) * 3; - } else { + if (dalpha) { dwi = (image->width - width) * 4; d = image->data + (dy*(int)image->width + dx) * 4; + } else { + dwi = (image->width - width) * 3; + d = image->data + (dy*(int)image->width + dx) * 3; } for (y=0; y < height; y++) { diff --git a/wrlib/view.c b/wrlib/view.c index 990a9879..3d01e51c 100644 --- a/wrlib/view.c +++ b/wrlib/view.c @@ -49,6 +49,23 @@ int main(int argc, char **argv) img = RScaleImage(img, img->width*atof(argv[2]), img->height*atof(argv[2])); } + + { + RImage *tmp = RCreateImage(200, 200, True); + RColor col = {0,0,255,255}; + + if (img->format == RRGBAFormat) + puts("aklpha"); + else + puts("no alpha"); + + RClearImage(tmp, &col); + + RCombineArea(tmp, img, 0, 0, 20, 20, 10, 10); + img = tmp; + } + + if (!RConvertImage(ctx, img, &pix)) { puts(RMessageForError(RErrorCode)); exit(1); @@ -59,8 +76,7 @@ int main(int argc, char **argv) win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10, - img->width, - img->height, 0, 0, 0); + 400, 400, 0, 0, 0); XSetWindowBackgroundPixmap(dpy, win, pix); XClearWindow(dpy, win); XMapRaised(dpy, win);