gdi32: Fix palette of 1bpp DIB in GetDIBits. Windows always generates a black/white palette for 1 bit DIBs generated from DDBs. Copying from the current palette only takes place for color DDBs (not explicitly mentioned in MSDN), and only if depth equal (MSDN states it, explicitly).
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c index 46be0f0..677cda5 100644 --- a/dlls/gdi32/dib.c +++ b/dlls/gdi32/dib.c
@@ -705,8 +705,10 @@ for (i = 0; i < (1 << bpp); i++) ((WORD *)colorPtr)[i] = (WORD)i; } - else if(bpp >= bmp->bitmap.bmBitsPixel) { - /* Generate the color map from the selected palette */ + else if(bpp > 1 && bpp == bmp->bitmap.bmBitsPixel) { + /* For color DDBs in native depth (mono DDBs always have + a black/white palette): + Generate the color map from the selected palette */ PALETTEENTRY palEntry[256]; memset( palEntry, 0, sizeof(palEntry) );
diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c index 79f6003..9a7213c 100644 --- a/dlls/gdi32/tests/bitmap.c +++ b/dlls/gdi32/tests/bitmap.c
@@ -1499,7 +1499,6 @@ "expected bmiColors[0] 0,0,0,0 - got %x %x %x %x\n", bi->bmiColors[0].rgbRed, bi->bmiColors[0].rgbGreen, bi->bmiColors[0].rgbBlue, bi->bmiColors[0].rgbReserved); -todo_wine ok(bi->bmiColors[1].rgbRed == 0xff && bi->bmiColors[1].rgbGreen == 0xff && bi->bmiColors[1].rgbBlue == 0xff && bi->bmiColors[1].rgbReserved == 0, "expected bmiColors[0] 0xff,0xff,0xff,0 - got %x %x %x %x\n",