Add tests for GetBitmapBits and GetObject for a DIB section
Dmitry Timoshkov
dmitry at codeweavers.com
Wed Apr 5 04:53:07 CDT 2006
Hello,
Changelog:
Add tests for GetBitmapBits and GetObject for a DIB section,
make them pass under Wine.
diff -up cvs/hq/wine/dlls/gdi/bitmap.c wine/dlls/gdi/bitmap.c
--- cvs/hq/wine/dlls/gdi/bitmap.c 2006-03-24 14:18:04.000000000 +0800
+++ wine/dlls/gdi/bitmap.c 2006-04-05 18:44:07.000000000 +0900
@@ -311,10 +311,19 @@ LONG WINAPI GetBitmapBits(
{
DIBSECTION *dib = bmp->dib;
const char *src = dib->dsBm.bmBits;
- DWORD max = dib->dsBm.bmWidthBytes * dib->dsBm.bmHeight;
+ INT width_bytes = BITMAP_GetWidthBytes(dib->dsBm.bmWidth, dib->dsBm.bmBitsPixel);
+ DWORD max = width_bytes * bmp->bitmap.bmHeight;
+
+ if (!bits)
+ {
+ ret = max;
+ goto done;
+ }
+
if (count > max) count = max;
ret = count;
- if (!bits) goto done;
+
+ /* GetBitmapBits returns not 32-bit aligned data */
if (bmp->dib->dsBmih.biHeight >= 0) /* not top-down, need to flip contents vertically */
{
@@ -322,12 +331,21 @@ LONG WINAPI GetBitmapBits(
while (count > 0)
{
src -= dib->dsBm.bmWidthBytes;
- memcpy( bits, src, min( count, dib->dsBm.bmWidthBytes ) );
- bits = (char *)bits + dib->dsBm.bmWidthBytes;
- count -= dib->dsBm.bmWidthBytes;
+ memcpy( bits, src, min( count, width_bytes ) );
+ bits = (char *)bits + width_bytes;
+ count -= width_bytes;
+ }
+ }
+ else
+ {
+ while (count > 0)
+ {
+ memcpy( bits, src, min( count, width_bytes ) );
+ src += dib->dsBm.bmWidthBytes;
+ bits = (char *)bits + width_bytes;
+ count -= width_bytes;
}
}
- else memcpy( bits, src, count );
goto done;
}
@@ -667,26 +685,25 @@ static INT BITMAP_GetObject( HGDIOBJ han
{
BITMAPOBJ *bmp = obj;
+ if( !buffer ) return sizeof(BITMAP);
+ if (count < sizeof(BITMAP)) return 0;
+
if (bmp->dib)
{
- if( !buffer )
- return sizeof(DIBSECTION);
- if (count < sizeof(DIBSECTION))
+ if (count >= sizeof(DIBSECTION))
{
- if (count > sizeof(BITMAP)) count = sizeof(BITMAP);
+ memcpy( buffer, bmp->dib, sizeof(DIBSECTION) );
+ return sizeof(DIBSECTION);
}
- else
- {
- if (count > sizeof(DIBSECTION)) count = sizeof(DIBSECTION);
+ else /* if (count >= sizeof(BITMAP)) */
+ {
+ DIBSECTION *dib = bmp->dib;
+ memcpy( buffer, &dib->dsBm, sizeof(BITMAP) );
+ return sizeof(BITMAP);
}
-
- memcpy( buffer, bmp->dib, count );
- return count;
}
else
{
- if( !buffer ) return sizeof(BITMAP);
- if (count < sizeof(BITMAP)) return 0;
memcpy( buffer, &bmp->bitmap, sizeof(BITMAP) );
return sizeof(BITMAP);
}
diff -up cvs/hq/wine/dlls/gdi/tests/bitmap.c wine/dlls/gdi/tests/bitmap.c
--- cvs/hq/wine/dlls/gdi/tests/bitmap.c 2006-04-04 12:45:28.000000000 +0900
+++ wine/dlls/gdi/tests/bitmap.c 2006-04-05 18:44:14.000000000 +0900
@@ -32,11 +32,88 @@
static BOOL is_win9x;
+static INT BITMAP_GetWidthBytes( INT bmWidth, INT bpp )
+{
+ switch(bpp)
+ {
+ case 1:
+ return 2 * ((bmWidth+15) >> 4);
+
+ case 24:
+ bmWidth *= 3; /* fall through */
+ case 8:
+ return bmWidth + (bmWidth & 1);
+
+ case 32:
+ return bmWidth * 4;
+
+ case 16:
+ case 15:
+ return bmWidth * 2;
+
+ case 4:
+ return 2 * ((bmWidth+3) >> 2);
+
+ default:
+ trace("Unknown depth %d, please report.\n", bpp );
+ assert(0);
+ }
+ return -1;
+}
+
+static void test_bitmap_info(HBITMAP hbm, INT expected_depth, const BITMAPINFOHEADER *bmih)
+{
+ BITMAP bm;
+ INT ret, width_bytes;
+ char buf[512], buf_cmp[512];
+
+ ret = GetObject(hbm, sizeof(bm), &bm);
+ ok(ret == sizeof(bm), "GetObject returned %d instead of %d\n", ret, sizeof(bm));
+
+ ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType);
+ ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth);
+ ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight);
+ width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel);
+ ok(bm.bmWidthBytes == width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, width_bytes);
+ ok(bm.bmPlanes == bmih->biPlanes, "wrong bm.bmPlanes %d\n", bm.bmPlanes);
+ ok(bm.bmBitsPixel == expected_depth, "wrong bm.bmBitsPixel %d != %d\n", bm.bmBitsPixel, expected_depth);
+ ok(bm.bmBits == NULL, "wrong bm.bmBits %p\n", bm.bmBits);
+
+ assert(sizeof(buf) >= bm.bmWidthBytes * bm.bmHeight);
+ assert(sizeof(buf) == sizeof(buf_cmp));
+
+ ret = GetBitmapBits(hbm, 0, NULL);
+ ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight);
+
+ memset(buf_cmp, 0xAA, sizeof(buf_cmp));
+ memset(buf_cmp, 0, bm.bmWidthBytes * bm.bmHeight);
+
+ memset(buf, 0xAA, sizeof(buf));
+ ret = GetBitmapBits(hbm, sizeof(buf), buf);
+ ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight);
+ ok(!memcmp(buf, buf_cmp, sizeof(buf)), "buffers do not match\n");
+
+ /* test various buffer sizes for GetObject */
+ ret = GetObject(hbm, 0, NULL);
+ ok(ret == sizeof(bm), "%d != %d\n", ret, sizeof(bm));
+
+ ret = GetObject(hbm, sizeof(bm) * 2, &bm);
+ ok(ret == sizeof(bm), "%d != %d\n", ret, sizeof(bm));
+
+ ret = GetObject(hbm, sizeof(bm) / 2, &bm);
+ ok(ret == 0, "%d != 0\n", ret);
+
+ ret = GetObject(hbm, 0, &bm);
+ ok(ret == 0, "%d != 0\n", ret);
+
+ ret = GetObject(hbm, 1, &bm);
+ ok(ret == 0, "%d != 0\n", ret);
+}
+
static void test_createdibitmap(void)
{
HDC hdc, hdcmem;
BITMAPINFOHEADER bmih;
- BITMAP bm;
HBITMAP hbm, hbm_colour, hbm_old;
INT screen_depth;
@@ -57,27 +134,21 @@ static void test_createdibitmap(void)
/* First try 32 bits */
hbm = CreateDIBitmap(hdc, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == screen_depth, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, screen_depth);
+ test_bitmap_info(hbm, screen_depth, &bmih);
DeleteObject(hbm);
/* Then 16 */
bmih.biBitCount = 16;
hbm = CreateDIBitmap(hdc, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == screen_depth, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, screen_depth);
+ test_bitmap_info(hbm, screen_depth, &bmih);
DeleteObject(hbm);
/* Then 1 */
bmih.biBitCount = 1;
hbm = CreateDIBitmap(hdc, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == screen_depth, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, screen_depth);
+ test_bitmap_info(hbm, screen_depth, &bmih);
DeleteObject(hbm);
/* Now with a monochrome dc we expect a monochrome bitmap */
@@ -87,27 +158,21 @@ static void test_createdibitmap(void)
bmih.biBitCount = 32;
hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == 1, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, 1);
+ test_bitmap_info(hbm, 1, &bmih);
DeleteObject(hbm);
/* Then 16 */
bmih.biBitCount = 16;
hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == 1, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, 1);
+ test_bitmap_info(hbm, 1, &bmih);
DeleteObject(hbm);
/* Then 1 */
bmih.biBitCount = 1;
hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == 1, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, 1);
+ test_bitmap_info(hbm, 1, &bmih);
DeleteObject(hbm);
/* Now select a polychrome bitmap into the dc and we expect
@@ -119,27 +184,21 @@ static void test_createdibitmap(void)
bmih.biBitCount = 32;
hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == screen_depth, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, screen_depth);
+ test_bitmap_info(hbm, screen_depth, &bmih);
DeleteObject(hbm);
/* Then 16 */
bmih.biBitCount = 16;
hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == screen_depth, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, screen_depth);
+ test_bitmap_info(hbm, screen_depth, &bmih);
DeleteObject(hbm);
/* Then 1 */
bmih.biBitCount = 1;
hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == screen_depth, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, screen_depth);
+ test_bitmap_info(hbm, screen_depth, &bmih);
DeleteObject(hbm);
SelectObject(hdcmem, hbm_old);
@@ -151,15 +210,123 @@ static void test_createdibitmap(void)
bmih.biBitCount = 32;
hbm = CreateDIBitmap(0, &bmih, 0, NULL, NULL, 0);
ok(hbm != NULL, "CreateDIBitmap failed\n");
- ok(GetObject(hbm, sizeof(bm), &bm), "GetObject failed\n");
-
- ok(bm.bmBitsPixel == 1, "CreateDIBitmap created bitmap of incorrect depth %d != %d\n", bm.bmBitsPixel, 1);
+ test_bitmap_info(hbm, 1, &bmih);
DeleteObject(hbm);
}
ReleaseDC(0, hdc);
}
+static INT DIB_GetWidthBytes( int width, int bpp )
+{
+ int words;
+
+ switch (bpp)
+ {
+ case 1: words = (width + 31) / 32; break;
+ case 4: words = (width + 7) / 8; break;
+ case 8: words = (width + 3) / 4; break;
+ case 15:
+ case 16: words = (width + 1) / 2; break;
+ case 24: words = (width * 3 + 3)/4; break;
+ case 32: words = width; break;
+
+ default:
+ trace("Unknown depth %d, please report.\n", bpp );
+ assert(0);
+ break;
+ }
+ return 4 * words;
+}
+
+static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER *bmih)
+{
+ BITMAP bm;
+ DIBSECTION ds;
+ INT ret, width_bytes;
+ BYTE *buf;
+
+ ret = GetObject(hbm, sizeof(bm), &bm);
+ ok(ret == sizeof(bm), "GetObject returned %d instead of %d\n", ret, sizeof(bm));
+
+ ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType);
+ ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth);
+ ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight);
+ width_bytes = DIB_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel);
+ ok(bm.bmWidthBytes == width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, width_bytes);
+ ok(bm.bmPlanes == bmih->biPlanes, "wrong bm.bmPlanes %d\n", bm.bmPlanes);
+ ok(bm.bmBitsPixel == bmih->biBitCount, "bm.bmBitsPixel %d != %d\n", bm.bmBitsPixel, bmih->biBitCount);
+ ok(bm.bmBits == bits, "wrong bm.bmBits %p != %p\n", bm.bmBits, bits);
+
+ buf = HeapAlloc(GetProcessHeap(), 0, bm.bmWidthBytes * bm.bmHeight + 4096);
+
+ width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel);
+
+ /* GetBitmapBits returns not 32-bit aligned data */
+ ret = GetBitmapBits(hbm, 0, NULL);
+ ok(ret == width_bytes * bm.bmHeight, "%d != %d\n", ret, width_bytes * bm.bmHeight);
+
+ memset(buf, 0xAA, bm.bmWidthBytes * bm.bmHeight + 4096);
+ ret = GetBitmapBits(hbm, bm.bmWidthBytes * bm.bmHeight + 4096, buf);
+ ok(ret == width_bytes * bm.bmHeight, "%d != %d\n", ret, width_bytes * bm.bmHeight);
+
+ HeapFree(GetProcessHeap(), 0, buf);
+
+ /* test various buffer sizes for GetObject */
+ memset(&ds, 0xAA, sizeof(ds));
+ ret = GetObject(hbm, sizeof(bm) * 2, &bm);
+ ok(ret == sizeof(bm), "%d != %d\n", ret, sizeof(bm));
+ ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth);
+ ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight);
+ ok(bm.bmBits == bits, "wrong bm.bmBits %p != %p\n", bm.bmBits, bits);
+
+ ret = GetObject(hbm, sizeof(bm) / 2, &bm);
+ ok(ret == 0, "%d != 0\n", ret);
+
+ ret = GetObject(hbm, 0, &bm);
+ ok(ret == 0, "%d != 0\n", ret);
+
+ ret = GetObject(hbm, 1, &bm);
+ ok(ret == 0, "%d != 0\n", ret);
+
+ /* test various buffer sizes for GetObject */
+ ret = GetObject(hbm, 0, NULL);
+ ok(ret == sizeof(bm), "%d != %d\n", ret, sizeof(bm));
+
+ memset(&ds, 0xAA, sizeof(ds));
+ ret = GetObject(hbm, sizeof(ds) * 2, &ds);
+ ok(ret == sizeof(ds), "%d != %d\n", ret, sizeof(ds));
+
+ ok(ds.dsBm.bmBits == bits, "wrong bm.bmBits %p != %p\n", ds.dsBm.bmBits, bits);
+ ok(ds.dsBmih.biSizeImage == ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight, "%lu != %u",
+ ds.dsBmih.biSizeImage, ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight);
+ ok(bmih->biSizeImage == 0, "%lu != 0\n", bmih->biSizeImage);
+ ds.dsBmih.biSizeImage = 0;
+
+ ok(ds.dsBmih.biSize == bmih->biSize, "%lu != %lu\n", ds.dsBmih.biSize, bmih->biSize);
+ ok(ds.dsBmih.biWidth == bmih->biWidth, "%lu != %lu\n", ds.dsBmih.biWidth, bmih->biWidth);
+ ok(ds.dsBmih.biHeight == bmih->biHeight, "%lu != %lu\n", ds.dsBmih.biHeight, bmih->biHeight);
+ ok(ds.dsBmih.biPlanes == bmih->biPlanes, "%u != %u\n", ds.dsBmih.biPlanes, bmih->biPlanes);
+ ok(ds.dsBmih.biBitCount == bmih->biBitCount, "%u != %u\n", ds.dsBmih.biBitCount, bmih->biBitCount);
+ ok(ds.dsBmih.biCompression == bmih->biCompression, "%lu != %lu\n", ds.dsBmih.biCompression, bmih->biCompression);
+ ok(ds.dsBmih.biSizeImage == bmih->biSizeImage, "%lu != %lu\n", ds.dsBmih.biSizeImage, bmih->biSizeImage);
+ ok(ds.dsBmih.biXPelsPerMeter == bmih->biXPelsPerMeter, "%lu != %lu\n", ds.dsBmih.biXPelsPerMeter, bmih->biXPelsPerMeter);
+ ok(ds.dsBmih.biYPelsPerMeter == bmih->biYPelsPerMeter, "%lu != %lu\n", ds.dsBmih.biYPelsPerMeter, bmih->biYPelsPerMeter);
+
+ memset(&ds, 0xAA, sizeof(ds));
+ ret = GetObject(hbm, sizeof(ds) - 4, &ds);
+ ok(ret == sizeof(ds.dsBm), "%d != %d\n", ret, sizeof(ds.dsBm));
+ ok(ds.dsBm.bmWidth == bmih->biWidth, "%lu != %lu\n", ds.dsBmih.biWidth, bmih->biWidth);
+ ok(ds.dsBm.bmHeight == bmih->biHeight, "%lu != %lu\n", ds.dsBmih.biHeight, bmih->biHeight);
+ ok(ds.dsBm.bmBits == bits, "%p != %p\n", ds.dsBm.bmBits, bits);
+
+ ret = GetObject(hbm, 0, &ds);
+ ok(ret == 0, "%d != 0\n", ret);
+
+ ret = GetObject(hbm, 1, &ds);
+ ok(ret == 0, "%d != 0\n", ret);
+}
+
#define test_color_todo(got, exp, txt, todo) \
if (!todo && got != exp && screen_depth < 24) { \
todo_wine ok(0, #txt " failed at %d-bit screen depth: got 0x%06x expected 0x%06x - skipping DIB tests\n", \
@@ -229,6 +396,7 @@ static void test_dibsections(void)
ok(info.Protect == PAGE_READWRITE, "%lx != PAGE_READWRITE\n", info.Protect);
ok(info.Type == MEM_PRIVATE, "%lx != MEM_PRIVATE\n", info.Type);
+ test_dib_info(hdib, bits, &pbmi->bmiHeader);
DeleteObject(hdib);
pbmi->bmiHeader.biBitCount = 8;
@@ -258,6 +426,7 @@ static void test_dibsections(void)
ok(info.Protect == PAGE_READWRITE, "%lx != PAGE_READWRITE\n", info.Protect);
ok(info.Type == MEM_PRIVATE, "%lx != MEM_PRIVATE\n", info.Type);
+ test_dib_info(hdib, bits, &pbmi->bmiHeader);
DeleteObject(hdib);
memset(pbmi, 0, sizeof(bmibuf));
@@ -352,6 +521,9 @@ static void test_dibsections(void)
hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
ok(hdib != NULL, "CreateDIBSection failed\n");
+
+ test_dib_info(hdib, bits, &pbmi->bmiHeader);
+
oldbm = SelectObject(hdcmem, hdib);
ret = GetDIBColorTable(hdcmem, 0, 2, rgb);
@@ -362,6 +534,7 @@ static void test_dibsections(void)
rgb[1].rgbRed, rgb[1].rgbGreen, rgb[1].rgbBlue, rgb[1].rgbReserved);
SelectObject(hdcmem, oldbm);
+ test_dib_info(hdib, bits, &pbmi->bmiHeader);
DeleteObject(hdib);
pbmi->bmiHeader.biBitCount = 4;
@@ -375,6 +548,7 @@ static void test_dibsections(void)
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);
+ test_dib_info(hdib, bits, &pbmi->bmiHeader);
DeleteObject(hdib);
pbmi->bmiHeader.biBitCount = 8;
@@ -403,6 +577,7 @@ static void test_dibsections(void)
}
SelectObject(hdcmem, oldbm);
+ test_dib_info(hdib, bits, &pbmi->bmiHeader);
DeleteObject(hdib);
pbmi->bmiHeader.biBitCount = 1;
@@ -466,6 +641,7 @@ static void test_dibsections(void)
bits[0] = bits[1] = 0xff;
bits[13 * 4] = bits[13*4 + 1] = 0xff;
+ test_dib_info(hdib, bits, &pbmi->bmiHeader);
pbmi->bmiHeader.biBitCount = 32;
@@ -480,6 +656,7 @@ static void test_dibsections(void)
ok(bits32[17] == 0xff00ff, "bottom but one, left pixel is %08lx\n", bits32[17]);
SelectObject(hdcmem2, oldbm2);
+ test_dib_info(hdib2, bits32, &pbmi->bmiHeader);
DeleteObject(hdib2);
SelectObject(hdcmem, oldbm);
@@ -517,6 +694,8 @@ static void test_dibsections(void)
ok(dibsec.dsBmih.biClrUsed == 256,
"created DIBSection: wrong biClrUsed field: %lu, should be: %u\n", dibsec.dsBmih.biClrUsed, 256);
+ test_dib_info(hdib, bits, &pbmi->bmiHeader);
+
SelectPalette(hdc, oldpal, TRUE);
oldbm = SelectObject(hdcmem, hdib);
oldpal = SelectPalette(hdcmem, hpal, TRUE);
@@ -772,6 +951,9 @@ static void test_bitmap(void)
assert(sizeof(buf) >= bm.bmWidthBytes * bm.bmHeight);
assert(sizeof(buf) == sizeof(buf_cmp));
+ ret = GetBitmapBits(hbmp, 0, NULL);
+ ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight);
+
memset(buf_cmp, 0xAA, sizeof(buf_cmp));
memset(buf_cmp, 0, bm.bmWidthBytes * bm.bmHeight);
More information about the wine-patches
mailing list