+ if ((RrRedOffset(inst) != RrDefaultRedOffset) ||
+ (RrBlueOffset(inst) != RrDefaultBlueOffset) ||
+ (RrGreenOffset(inst) != RrDefaultGreenOffset)) {
+ for (y = 0; y < im->height; y++) {
+ for (x = 0; x < im->width; x++) {
+ r = (data[x] >> RrDefaultRedOffset) & 0xFF;
+ g = (data[x] >> RrDefaultGreenOffset) & 0xFF;
+ b = (data[x] >> RrDefaultBlueOffset) & 0xFF;
+ p32[x] = (r << RrRedOffset(inst))
+ + (g << RrGreenOffset(inst))
+ + (b << RrBlueOffset(inst));
+ }
+ data += im->width;
+ p32 += im->width;
+ }
+ } else im->data = (gchar*) data;
+ break;
+ case 16:
+ for (y = 0; y < im->height; y++) {
+ for (x = 0; x < im->width; x++) {
+ r = (data[x] >> RrDefaultRedOffset) & 0xFF;
+ r = r >> RrRedShift(inst);
+ g = (data[x] >> RrDefaultGreenOffset) & 0xFF;
+ g = g >> RrGreenShift(inst);
+ b = (data[x] >> RrDefaultBlueOffset) & 0xFF;
+ b = b >> RrBlueShift(inst);
+ p16[x] = (r << RrRedOffset(inst))
+ + (g << RrGreenOffset(inst))
+ + (b << RrBlueOffset(inst));
+ }
+ data += im->width;
+ p16 += im->bytes_per_line/2;
+ }
+ break;
+ case 8:
+ if (RrVisual(inst)->class == TrueColor) {
+ for (y = 0; y < im->height; y++) {
+ for (x = 0; x < im->width; x++) {
+ r = (data[x] >> RrDefaultRedOffset) & 0xFF;
+ r = r >> RrRedShift(inst);
+ g = (data[x] >> RrDefaultGreenOffset) & 0xFF;
+ g = g >> RrGreenShift(inst);
+ b = (data[x] >> RrDefaultBlueOffset) & 0xFF;
+ b = b >> RrBlueShift(inst);
+ p8[x] = (r << RrRedOffset(inst))
+ + (g << RrGreenOffset(inst))
+ + (b << RrBlueOffset(inst));
+ }
+ data += im->width;
+ p8 += im->bytes_per_line;
+ }
+ } else {