Alexandre Julliard : gdi32: Return bitmask for 32-bit bitmaps too in GetDIBits.
Alexandre Julliard
julliard at winehq.org
Mon Apr 21 07:45:55 CDT 2008
Module: wine
Branch: master
Commit: baceb8d07e0ae08a00aaaac39c15b14f872c9d97
URL: http://source.winehq.org/git/wine.git/?a=commit;h=baceb8d07e0ae08a00aaaac39c15b14f872c9d97
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Apr 21 11:57:30 2008 +0200
gdi32: Return bitmask for 32-bit bitmaps too in GetDIBits.
---
dlls/gdi32/dib.c | 18 +++++++++++++-----
dlls/gdi32/tests/bitmap.c | 6 ++++--
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c
index caf3e6c..de5a5a4 100644
--- a/dlls/gdi32/dib.c
+++ b/dlls/gdi32/dib.c
@@ -640,19 +640,17 @@ INT WINAPI GetDIBits(
DIB_GetDIBImageBytes( bmp->bitmap.bmWidth,
bmp->bitmap.bmHeight,
bmp->bitmap.bmBitsPixel );
+ info->bmiHeader.biCompression = (bmp->bitmap.bmBitsPixel > 8) ? BI_BITFIELDS : BI_RGB;
switch(bmp->bitmap.bmBitsPixel)
{
case 15:
info->bmiHeader.biBitCount = 16;
- info->bmiHeader.biCompression = BI_RGB;
break;
- case 16:
- info->bmiHeader.biBitCount = 16;
- info->bmiHeader.biCompression = BI_BITFIELDS;
+ case 24:
+ info->bmiHeader.biBitCount = 32;
break;
default:
info->bmiHeader.biBitCount = bmp->bitmap.bmBitsPixel;
- info->bmiHeader.biCompression = BI_RGB;
break;
}
info->bmiHeader.biXPelsPerMeter = 0;
@@ -824,6 +822,16 @@ INT WINAPI GetDIBits(
((PDWORD)info->bmiColors)[2] = 0x001f;
}
break;
+
+ case 24:
+ case 32:
+ if (info->bmiHeader.biCompression == BI_BITFIELDS)
+ {
+ ((PDWORD)info->bmiColors)[0] = 0xff0000;
+ ((PDWORD)info->bmiColors)[1] = 0x00ff00;
+ ((PDWORD)info->bmiColors)[2] = 0x0000ff;
+ }
+ break;
}
if (bits && lines)
diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c
index 15a463b..f7bfdfd 100644
--- a/dlls/gdi32/tests/bitmap.c
+++ b/dlls/gdi32/tests/bitmap.c
@@ -1623,11 +1623,13 @@ static void test_GetDIBits_BI_BITFIELDS(void)
/* Call GetDIBits to fill in bmiHeader. */
ret = GetDIBits(hdc, hbm, 0, 1, NULL, dibinfo, DIB_RGB_COLORS);
ok(ret == 1, "GetDIBits failed\n");
- if (dibinfo->bmiHeader.biBitCount == 16 &&
- dibinfo->bmiHeader.biCompression == BI_BITFIELDS)
+ if (dibinfo->bmiHeader.biBitCount > 8)
{
DWORD *bitmasks = (DWORD *)dibinfo->bmiColors;
+ ok( dibinfo->bmiHeader.biCompression == BI_BITFIELDS,
+ "compression is %u\n", dibinfo->bmiHeader.biCompression );
+
ok( !bitmasks[0], "red mask is set\n" );
ok( !bitmasks[1], "green mask is set\n" );
ok( !bitmasks[2], "blue mask is set\n" );
More information about the wine-cvs
mailing list