+ src_data = (uint32_t *) *src->data;
+
+ pixel = 0;
+ for (y = 0; y < dest->height; y++)
+ {
+ for (x = 0; x < dest->width; x++, pixel++)
+ {
+ int32_t bytenum;
+
+ src_r = (src_data[pixel] >> 8) & 0xFF;
+ src_g = (src_data[pixel] >> 16) & 0xFF;
+ src_b = (src_data[pixel] >> 24) & 0xFF;
+
+ dest_r = dest_r_maxval * src_r / 0xFF;
+ dest_g = dest_g_maxval * src_g / 0xFF;
+ dest_b = dest_b_maxval * src_b / 0xFF;
+
+ dest_pixel_value = 0
+ | ((dest_r << dest_r_offset) & dest->red_mask)
+ | ((dest_g << dest_g_offset) & dest->green_mask)
+ | ((dest_b << dest_b_offset) & dest->blue_mask);
+
+ if ((y == 150) && (x == 200))
+ printf ("[200x150] RGB(%u,%u,%u) -> RGB(%u,%u,%u) -> 0x%04x\n",
+ src_r, src_g, src_b,
+ dest_r, dest_g, dest_b,
+ dest_pixel_value);
+ for (bytenum = 0; bytenum < (dest->depth / 8); bytenum++)
+ {
+ int offset = (pixel * dest->bits_per_pixel / 8) + bytenum;
+ dest->data[(pixel * dest->bits_per_pixel / 8) + bytenum] =
+ (dest_pixel_value >> (dest->bits_per_pixel - (8 * (bytenum + 1)))) & 0xFF;
+ if ((y == 150) && (x == 200))
+ printf ("Setting byte #%i to 0x%02x\n",
+ offset, dest->data[offset]);
+ }
+ }
+ }
+
+ return (0);
+} /* int copy_rgb_to_zpixmap */