diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-02-14 19:18:19 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-02-14 19:18:19 +0000 |
| commit | e3f6e0ff8195e73f2fa8c9db431941e171dd0041 (patch) | |
| tree | 138b580fd1d5d831f22554e9338e1ee9fbec051b /otk/truerendercontrol.cc | |
| parent | 53b5c60a5e8bbf2942ef174c2db64db6cdac3e26 (diff) | |
make reduceDepth set the im->data member, with newly allocated data, so the pixelData in the surface isn't reduced
Diffstat (limited to 'otk/truerendercontrol.cc')
| -rw-r--r-- | otk/truerendercontrol.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/otk/truerendercontrol.cc b/otk/truerendercontrol.cc index 2f1b710e..2ce771eb 100644 --- a/otk/truerendercontrol.cc +++ b/otk/truerendercontrol.cc @@ -60,7 +60,8 @@ void TrueRenderControl::reduceDepth(Surface &sf, XImage *im) const int r, g, b; int x,y; pixel32 *data = sf.pixelData(); - pixel16 *p = (pixel16*) data; + pixel32 *ret = (pixel32*)malloc(im->width * im->height * 4); + pixel16 *p = (pixel16*) ret; switch (im->bits_per_pixel) { case 32: if ((_red_offset != default_red_shift) || @@ -72,13 +73,15 @@ void TrueRenderControl::reduceDepth(Surface &sf, XImage *im) const r = (data[x] >> default_red_shift) & 0xFF; g = (data[x] >> default_green_shift) & 0xFF; b = (data[x] >> default_blue_shift) & 0xFF; - data[x] = (r << _red_offset) + (g << _green_offset) + + ret[x] = (r << _red_offset) + (g << _green_offset) + (b << _blue_offset); } data += im->width; } - } - return; + } else { + memcpy(ret, data, im->width * im->height * 4); + } + break; case 16: for (y = 0; y < im->height; y++) { for (x = 0; x < im->width; x++) { @@ -97,6 +100,7 @@ void TrueRenderControl::reduceDepth(Surface &sf, XImage *im) const default: printf("your bit depth is currently unhandled\n"); } + im->data = (char*)ret; } void TrueRenderControl::allocateColor(XColor *color) const |
