gdi32: Respect DIB_PAL_COLORS in every case.
This commit is contained in:
parent
b73b2eca47
commit
5333923253
|
@ -701,7 +701,11 @@ INT WINAPI GetDIBits(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(bpp >= bmp->bitmap.bmBitsPixel) {
|
if (coloruse == DIB_PAL_COLORS) {
|
||||||
|
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 */
|
/* Generate the color map from the selected palette */
|
||||||
PALETTEENTRY palEntry[256];
|
PALETTEENTRY palEntry[256];
|
||||||
|
|
||||||
|
@ -713,7 +717,6 @@ INT WINAPI GetDIBits(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
for (i = 0; i < (1 << bmp->bitmap.bmBitsPixel); i++) {
|
for (i = 0; i < (1 << bmp->bitmap.bmBitsPixel); i++) {
|
||||||
if (coloruse == DIB_RGB_COLORS) {
|
|
||||||
if (core_header)
|
if (core_header)
|
||||||
{
|
{
|
||||||
rgbTriples[i].rgbtRed = palEntry[i].peRed;
|
rgbTriples[i].rgbtRed = palEntry[i].peRed;
|
||||||
|
@ -728,8 +731,6 @@ INT WINAPI GetDIBits(
|
||||||
rgbQuads[i].rgbReserved = 0;
|
rgbQuads[i].rgbReserved = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else ((WORD *)colorPtr)[i] = (WORD)i;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
switch (bpp) {
|
switch (bpp) {
|
||||||
case 1:
|
case 1:
|
||||||
|
|
|
@ -1315,6 +1315,28 @@ static void test_GetDIBits_selected_DDB(BOOL monochrome)
|
||||||
}
|
}
|
||||||
ok(equalContents, "GetDIBits with DDB selected in DC: Got different DIB bits\n");
|
ok(equalContents, "GetDIBits with DDB selected in DC: Got different DIB bits\n");
|
||||||
|
|
||||||
|
/* Test the palette */
|
||||||
|
equalContents = TRUE;
|
||||||
|
if (info2->bmiHeader.biBitCount <= 8)
|
||||||
|
{
|
||||||
|
WORD *colors = (WORD*)info2->bmiColors;
|
||||||
|
|
||||||
|
/* Get the palette indices */
|
||||||
|
res = GetDIBits(dc, ddb, 0, 0, NULL, info2, DIB_PAL_COLORS);
|
||||||
|
ok(res, "GetDIBits failed\n");
|
||||||
|
|
||||||
|
for (i=0;i < 1 << info->bmiHeader.biSizeImage; i++)
|
||||||
|
{
|
||||||
|
if (colors[i] != i)
|
||||||
|
{
|
||||||
|
equalContents = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ok(equalContents, "GetDIBits with DDB selected in DC: non 1:1 palette indices\n");
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, bits2);
|
HeapFree(GetProcessHeap(), 0, bits2);
|
||||||
HeapFree(GetProcessHeap(), 0, bits);
|
HeapFree(GetProcessHeap(), 0, bits);
|
||||||
DeleteDC(dc);
|
DeleteDC(dc);
|
||||||
|
@ -1496,6 +1518,16 @@ todo_wine
|
||||||
todo_wine
|
todo_wine
|
||||||
ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n");
|
ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n");
|
||||||
|
|
||||||
|
/* Test the palette indices */
|
||||||
|
memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256);
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
lines = GetDIBits(hdc, hbmp, 0, 0, NULL, bi, DIB_PAL_COLORS);
|
||||||
|
|
||||||
|
ok(((WORD*)bi->bmiColors)[0] == 0, "Color 0 is %d\n", ((WORD*)bi->bmiColors)[0]);
|
||||||
|
ok(((WORD*)bi->bmiColors)[1] == 1, "Color 1 is %d\n", ((WORD*)bi->bmiColors)[1]);
|
||||||
|
for (i = 2; i < 256; i++)
|
||||||
|
ok(((WORD*)bi->bmiColors)[i] == 0xAAAA, "Color %d is %d\n", i, ((WORD*)bi->bmiColors)[1]);
|
||||||
|
|
||||||
/* retrieve 24-bit DIB data */
|
/* retrieve 24-bit DIB data */
|
||||||
memset(bi, 0, sizeof(*bi));
|
memset(bi, 0, sizeof(*bi));
|
||||||
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||||
|
@ -1596,6 +1628,16 @@ todo_wine
|
||||||
todo_wine
|
todo_wine
|
||||||
ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n");
|
ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n");
|
||||||
|
|
||||||
|
/* Test the palette indices */
|
||||||
|
memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256);
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
lines = GetDIBits(hdc, hbmp, 0, 0, NULL, bi, DIB_PAL_COLORS);
|
||||||
|
|
||||||
|
ok(((WORD*)bi->bmiColors)[0] == 0, "Color 0 is %d\n", ((WORD*)bi->bmiColors)[0]);
|
||||||
|
ok(((WORD*)bi->bmiColors)[1] == 1, "Color 1 is %d\n", ((WORD*)bi->bmiColors)[1]);
|
||||||
|
for (i = 2; i < 256; i++)
|
||||||
|
ok(((WORD*)bi->bmiColors)[i] == 0xAAAA, "Color %d is %d\n", i, ((WORD*)bi->bmiColors)[i]);
|
||||||
|
|
||||||
/* retrieve 24-bit DIB data */
|
/* retrieve 24-bit DIB data */
|
||||||
memset(bi, 0, sizeof(*bi));
|
memset(bi, 0, sizeof(*bi));
|
||||||
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||||
|
|
Loading…
Reference in New Issue