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.
This commit is contained in:
Rob Farnum 2000-05-24 21:04:42 +00:00 committed by Alexandre Julliard
parent 53532248c4
commit c5384f14b7
1 changed files with 49 additions and 2 deletions

View File

@ -2221,7 +2221,6 @@ static void X11DRV_DIB_SetImageBits_32( int lines, const BYTE *srcbits,
switch ( bmpImage->depth ) switch ( bmpImage->depth )
{ {
case 24:
case 32: case 32:
/* ==== 32 BGR dib to 24/32 BGR bitmap ==== */ /* ==== 32 BGR dib to 24/32 BGR bitmap ==== */
if (bmpImage->red_mask == 0xff0000 && bmpImage->blue_mask == 0xff) { 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; 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: case 15:
/* ==== 32 BGR dib to 555 BGR bitmap ==== */ /* ==== 32 BGR dib to 555 BGR bitmap ==== */
if (bmpImage->red_mask == 0x7c00 && bmpImage->blue_mask == 0x001f) 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 ) switch ( bmpImage->depth )
{ {
case 24:
case 32: case 32:
/* ==== 24/32 BGR bitmap to 32 BGR dib ==== */ /* ==== 24/32 BGR bitmap to 32 BGR dib ==== */
if ( bmpImage->red_mask == 0xff0000 && bmpImage->blue_mask == 0xff ) 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; else goto notsupported;
break; 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: case 15:
{ {
LPWORD srcpixel; LPWORD srcpixel;