Commit c5384f14 authored by Rob Farnum's avatar Rob Farnum Committed by Alexandre Julliard

Separate out the 32bit case from the 24bit case, and copy 3bytes of

source for every 4bytes of input, into the destination for the 24bit case.
parent 53532248
......@@ -2221,7 +2221,6 @@ static void X11DRV_DIB_SetImageBits_32( int lines, const BYTE *srcbits,
switch ( bmpImage->depth )
{
case 24:
case 32:
/* ==== 32 BGR dib to 24/32 BGR bitmap ==== */
if (bmpImage->red_mask == 0xff0000 && bmpImage->blue_mask == 0xff) {
......@@ -2247,6 +2246,29 @@ static void X11DRV_DIB_SetImageBits_32( int lines, const BYTE *srcbits,
break;
case 24:
/* ==== 32 BGR dib to 24 (888) BGR bitmap ==== */
/* we need to check that source mask matches destination */
{
DWORD *srcpixel;
BYTE *bptr;
srcpixel = (DWORD *) srcbits + left;
bptr = bmpImage->data;
for (h = lines - 1; h >= 0; h--) {
for (x = 0; x < dstwidth; x++) {
/* *srcpixel is a 32bit value */
/* bptr points to first of 3 bytes */
*bptr++ = (*srcpixel >> 16) & 0xff;
*bptr++ = (*srcpixel >> 8) & 0xff;
*bptr++ = (*srcpixel ) & 0xff;
srcpixel++;
}
}
}
break;
case 15:
/* ==== 32 BGR dib to 555 BGR bitmap ==== */
if (bmpImage->red_mask == 0x7c00 && bmpImage->blue_mask == 0x001f)
......@@ -2360,7 +2382,6 @@ static void X11DRV_DIB_GetImageBits_32( int lines, BYTE *dstbits,
switch ( bmpImage->depth )
{
case 24:
case 32:
/* ==== 24/32 BGR bitmap to 32 BGR dib ==== */
if ( bmpImage->red_mask == 0xff0000 && bmpImage->blue_mask == 0xff )
......@@ -2385,6 +2406,32 @@ static void X11DRV_DIB_GetImageBits_32( int lines, BYTE *dstbits,
else goto notsupported;
break;
case 24:
/* ==== 24 BGR bitmap to 32 (0888) BGR dib ==== */
/* we need to check that source mask matches destination */
{
DWORD *srcpixel;
BYTE *bptr;
DWORD srcdata;
srcpixel = (DWORD *) dstbits;
bptr = bmpImage->data;
for (h = lines - 1; h >= 0; h--) {
for (x = 0; x < dstwidth; x++) {
/* *srcpixel is a 32bit value */
/* bptr points to first of 3 bytes */
srcdata = 0;
srcdata = srcdata << 8 | *bptr++;
srcdata = srcdata << 8 | *bptr++;
srcdata = srcdata << 8 | *bptr++;
*srcpixel++ = srcdata;
}
}
}
break;
case 15:
{
LPWORD srcpixel;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment