-/* taken from gdi32, bitmap.c */\r
-UINT\r
-FASTCALL\r
-DIB_BitmapMaxBitsSize( PBITMAPINFO Info, UINT ScanLines )\r
-{\r
- UINT MaxBits = 0;\r
-\r
- if (Info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))\r
- {\r
- PBITMAPCOREHEADER Core = (PBITMAPCOREHEADER)Info;\r
- MaxBits = Core->bcBitCount * Core->bcPlanes * Core->bcWidth;\r
- }\r
- else /* assume BITMAPINFOHEADER */\r
- {\r
- if ((Info->bmiHeader.biCompression) && (Info->bmiHeader.biCompression != BI_BITFIELDS))\r
- return Info->bmiHeader.biSizeImage;\r
- // Planes are over looked by Yuan. I guess assumed always 1.\r
- MaxBits = Info->bmiHeader.biBitCount * Info->bmiHeader.biPlanes * Info->bmiHeader.biWidth;\r
- }\r
- MaxBits = ((MaxBits + 31) & ~31 ) / 8; // From Yuan, ScanLineSize = (Width * bitcount + 31)/32\r
- return (MaxBits * ScanLines); // ret the full Size.\r
-}\r
-\r
-\r
-INT\r
-Test_NtGdiGetDIBitsInternal(PTESTINFO pti)\r
-{\r
- HBITMAP hBitmap;\r
- struct\r
- {\r
- BITMAPINFO bi;\r
- RGBQUAD Colors[20];\r
- } bmp;\r
-// BITMAPINFO bi;\r
- INT ScreenBpp;\r
- BITMAPCOREINFO bic;\r
- DWORD data[20*16];\r
-\r
- HDC hDCScreen = GetDC(NULL);\r
- ASSERT(hDCScreen != NULL);\r
-\r
- hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16);\r
- ASSERT(hBitmap != NULL);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- RTEST(NtGdiGetDIBitsInternal(0, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- RTEST(NtGdiGetDIBitsInternal((HDC)2345, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, NULL, 0, 0, 0) == 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
- ZeroMemory(&bmp, sizeof(bmp));\r
- bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
- FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- RTEST(NtGdiGetDIBitsInternal((HDC)0, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
- TEST(bmp.Colors[0].rgbRed == 0x44);\r
-\r
- ZeroMemory(&bmp, sizeof(bmp));\r
- bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
- FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
- TEST(bmp.Colors[0].rgbRed == 0x44);\r
-\r
- ZeroMemory(&bmp, sizeof(bmp));\r
- bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
- FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, &bmp.bi, DIB_RGB_COLORS,\r
- DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
- ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL);\r
-\r
- RTEST(bmp.bi.bmiHeader.biWidth == 16);\r
- RTEST(bmp.bi.bmiHeader.biHeight == 16);\r
- RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp);\r
- RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));\r
-\r
- TEST(bmp.Colors[0].rgbRed == 0x44);\r
-\r
- /* Test with pointer */\r
-// ZeroMemory(&bmp.bi, sizeof(BITMAPINFO));\r
- bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-// FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x11223344);\r
-\r
- SetLastError(ERROR_SUCCESS);\r
- TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, (void*)data, &bmp.bi, DIB_RGB_COLORS,\r
- DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
- RTEST(bmp.bi.bmiHeader.biWidth == 16);\r
- RTEST(bmp.bi.bmiHeader.biHeight == 16);\r
- RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp);\r
- RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));\r
-\r
- TEST(bmp.Colors[0].rgbRed != 0x44);\r
-\r
- /* Test a BITMAPCOREINFO structure */\r
- SetLastError(ERROR_SUCCESS);\r
- ZeroMemory(&bic, sizeof(BITMAPCOREINFO));\r
- bic.bmciHeader.bcSize = sizeof(BITMAPCOREHEADER);\r
- TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, (PBITMAPINFO)&bic, DIB_RGB_COLORS,\r
- DIB_BitmapMaxBitsSize((PBITMAPINFO)&bic, 15), 0) > 0);\r
- RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-\r
- ReleaseDC(NULL, hDCScreen);\r
- DeleteObject(hBitmap);\r
-\r
- return APISTATUS_NORMAL;\r
-}\r
+/* taken from gdi32, bitmap.c */
+UINT
+FASTCALL
+DIB_BitmapMaxBitsSize( PBITMAPINFO Info, UINT ScanLines )
+{
+ UINT MaxBits = 0;
+
+ if (Info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
+ {
+ PBITMAPCOREHEADER Core = (PBITMAPCOREHEADER)Info;
+ MaxBits = Core->bcBitCount * Core->bcPlanes * Core->bcWidth;
+ }
+ else /* assume BITMAPINFOHEADER */
+ {
+ if ((Info->bmiHeader.biCompression) && (Info->bmiHeader.biCompression != BI_BITFIELDS))
+ return Info->bmiHeader.biSizeImage;
+ // Planes are over looked by Yuan. I guess assumed always 1.
+ MaxBits = Info->bmiHeader.biBitCount * Info->bmiHeader.biPlanes * Info->bmiHeader.biWidth;
+ }
+ MaxBits = ((MaxBits + 31) & ~31 ) / 8; // From Yuan, ScanLineSize = (Width * bitcount + 31)/32
+ return (MaxBits * ScanLines); // ret the full Size.
+}
+
+
+INT
+Test_NtGdiGetDIBitsInternal(PTESTINFO pti)
+{
+ HBITMAP hBitmap;
+ struct
+ {
+ BITMAPINFO bi;
+ RGBQUAD Colors[20];
+ } bmp;
+// BITMAPINFO bi;
+ INT ScreenBpp;
+ BITMAPCOREINFO bic;
+ DWORD data[20*16];
+
+ HDC hDCScreen = GetDC(NULL);
+ ASSERT(hDCScreen != NULL);
+
+ hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16);
+ ASSERT(hBitmap != NULL);
+
+ SetLastError(ERROR_SUCCESS);
+ RTEST(NtGdiGetDIBitsInternal(0, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+
+ SetLastError(ERROR_SUCCESS);
+ RTEST(NtGdiGetDIBitsInternal((HDC)2345, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+
+ SetLastError(ERROR_SUCCESS);
+ RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+
+ SetLastError(ERROR_SUCCESS);
+ RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+
+ SetLastError(ERROR_SUCCESS);
+ RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, NULL, 0, 0, 0) == 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+
+ ZeroMemory(&bmp, sizeof(bmp));
+ bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);
+
+ SetLastError(ERROR_SUCCESS);
+ RTEST(NtGdiGetDIBitsInternal((HDC)0, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+ TEST(bmp.Colors[0].rgbRed == 0x44);
+
+ ZeroMemory(&bmp, sizeof(bmp));
+ bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);
+
+ SetLastError(ERROR_SUCCESS);
+ RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+ TEST(bmp.Colors[0].rgbRed == 0x44);
+
+ ZeroMemory(&bmp, sizeof(bmp));
+ bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);
+
+ SetLastError(ERROR_SUCCESS);
+ RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, &bmp.bi, DIB_RGB_COLORS,
+ DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+
+ ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL);
+
+ RTEST(bmp.bi.bmiHeader.biWidth == 16);
+ RTEST(bmp.bi.bmiHeader.biHeight == 16);
+ RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp);
+ RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));
+
+ TEST(bmp.Colors[0].rgbRed == 0x44);
+
+ /* Test with pointer */
+// ZeroMemory(&bmp.bi, sizeof(BITMAPINFO));
+ bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+// FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x11223344);
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, (void*)data, &bmp.bi, DIB_RGB_COLORS,
+ DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+
+ RTEST(bmp.bi.bmiHeader.biWidth == 16);
+ RTEST(bmp.bi.bmiHeader.biHeight == 16);
+ RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp);
+ RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));
+
+ TEST(bmp.Colors[0].rgbRed != 0x44);
+
+ /* Test a BITMAPCOREINFO structure */
+ SetLastError(ERROR_SUCCESS);
+ ZeroMemory(&bic, sizeof(BITMAPCOREINFO));
+ bic.bmciHeader.bcSize = sizeof(BITMAPCOREHEADER);
+ TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, (PBITMAPINFO)&bic, DIB_RGB_COLORS,
+ DIB_BitmapMaxBitsSize((PBITMAPINFO)&bic, 15), 0) > 0);
+ RTEST(GetLastError() == ERROR_SUCCESS);
+
+
+ ReleaseDC(NULL, hDCScreen);
+ DeleteObject(hBitmap);
+
+ return APISTATUS_NORMAL;
+}