wine/dlls/gdi tests/bitmap.c dib.c

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 14 09:10:23 CST 2005


ChangeSet ID:	21259
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at winehq.org	2005/11/14 09:10:23

Modified files:
	dlls/gdi/tests : bitmap.c 
	dlls/gdi       : dib.c 

Log message:
	Peter Beutner <p.beutner at gmx.net>
	When creating DIBs with a color depth <= 8, always set biClrUsed field
	to the number of entries in the color table.

Patch: http://cvs.winehq.org/patch.py?id=21259

Old revision  New revision  Changes     Path
 1.8           1.9           +27 -0      wine/dlls/gdi/tests/bitmap.c
 1.14          1.15          +4 -0       wine/dlls/gdi/dib.c

Index: wine/dlls/gdi/tests/bitmap.c
diff -u -p wine/dlls/gdi/tests/bitmap.c:1.8 wine/dlls/gdi/tests/bitmap.c:1.9
--- wine/dlls/gdi/tests/bitmap.c:1.8	14 Nov 2005 15:10:23 -0000
+++ wine/dlls/gdi/tests/bitmap.c	14 Nov 2005 15:10:23 -0000
@@ -194,6 +194,7 @@ static void test_dibsections(void)
     WORD *index;
     DWORD *bits32;
     HPALETTE hpal, oldpal;
+    DIBSECTION dibsec;
     COLORREF c0, c1;
     int i;
     int screen_depth;
@@ -216,6 +217,9 @@ static void test_dibsections(void)
 
     hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
     ok(hdib != NULL, "CreateDIBSection failed\n");
+    ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIBSection\n");
+    ok(dibsec.dsBmih.biClrUsed == 2,
+        "created DIBSection: wrong biClrUsed field: %lu, should be: %u\n", dibsec.dsBmih.biClrUsed, 2);
 
     /* Test if the old BITMAPCOREINFO structure is supported */    
         
@@ -280,6 +284,19 @@ static void test_dibsections(void)
     SelectObject(hdcmem, oldbm);
     DeleteObject(hdib);
 
+    pbmi->bmiHeader.biBitCount = 4;
+    for (i = 0; i < 16; i++) {
+        pbmi->bmiColors[i].rgbRed = i;
+        pbmi->bmiColors[i].rgbGreen = 16-i;
+        pbmi->bmiColors[i].rgbBlue = 0;
+    }
+    hdib = CreateDIBSection(hdcmem, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
+    ok(hdib != NULL, "CreateDIBSection failed\n");
+    ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n");
+    ok(dibsec.dsBmih.biClrUsed == 16,
+       "created DIBSection: wrong biClrUsed field: %lu, should be: %u\n", dibsec.dsBmih.biClrUsed, 16);
+    DeleteObject(hdib);
+
     pbmi->bmiHeader.biBitCount = 8;
 
     for (i = 0; i < 128; i++) {
@@ -292,6 +309,10 @@ static void test_dibsections(void)
     }
     hdib = CreateDIBSection(hdcmem, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
     ok(hdib != NULL, "CreateDIBSection failed\n");
+    ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n");
+    ok(dibsec.dsBmih.biClrUsed == 256,
+        "created DIBSection: wrong biClrUsed field: %lu, should be: %u\n", dibsec.dsBmih.biClrUsed, 256);
+
     oldbm = SelectObject(hdcmem, hdib);
 
     for (i = 0; i < 256; i++) {
@@ -322,6 +343,9 @@ static void test_dibsections(void)
     oldpal = SelectPalette(hdc, hpal, TRUE);
     hdib = CreateDIBSection(hdc, pbmi, DIB_PAL_COLORS, (void**)&bits, NULL, 0);
     ok(hdib != NULL, "CreateDIBSection failed\n");
+    ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n");
+    ok(dibsec.dsBmih.biClrUsed == 2,
+        "created DIBSection: wrong biClrUsed field: %lu, should be: %u\n", dibsec.dsBmih.biClrUsed, 2);
 
     /* The colour table has already been grabbed from the dc, so we select back the
        old palette */
@@ -409,6 +433,9 @@ static void test_dibsections(void)
     oldpal = SelectPalette(hdc, hpal, TRUE);
     hdib = CreateDIBSection(hdc, pbmi, DIB_PAL_COLORS, (void**)&bits, NULL, 0);
     ok(hdib != NULL, "CreateDIBSection failed\n");
+    ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n");
+    ok(dibsec.dsBmih.biClrUsed == 256,
+        "created DIBSection: wrong biClrUsed field: %lu, should be: %u\n", dibsec.dsBmih.biClrUsed, 256);
 
     SelectPalette(hdc, oldpal, TRUE);
     oldbm = SelectObject(hdcmem, hdib);
Index: wine/dlls/gdi/dib.c
diff -u -p wine/dlls/gdi/dib.c:1.14 wine/dlls/gdi/dib.c:1.15
--- wine/dlls/gdi/dib.c:1.14	14 Nov 2005 15:10:23 -0000
+++ wine/dlls/gdi/dib.c	14 Nov 2005 15:10:23 -0000
@@ -1180,6 +1180,10 @@ HBITMAP DIB_CreateDIBSection(HDC hdc, co
         dib->dsBmih.biSize = sizeof(BITMAPINFOHEADER);
     }
 
+    /* set number of entries in bmi.bmiColors table */
+    if( bpp <= 8 )
+        dib->dsBmih.biClrUsed = 1 << bpp;
+
     /* only use sizeImage if it's valid and we're dealing with a compressed bitmap */
     if (sizeImage && (compression == BI_RLE4 || compression == BI_RLE8))
         dib->dsBmih.biSizeImage = sizeImage;



More information about the wine-cvs mailing list