diff --git a/rostests/apitests/gdi32/CMakeLists.txt b/rostests/apitests/gdi32/CMakeLists.txt index 30885c9f0c9..2418976b336 100644 --- a/rostests/apitests/gdi32/CMakeLists.txt +++ b/rostests/apitests/gdi32/CMakeLists.txt @@ -34,6 +34,7 @@ list(APPEND SOURCE GetCurrentObject.c GetDIBits.c GetObject.c + GetPixel.c GetStockObject.c GetTextExtentExPoint.c GetTextFace.c diff --git a/rostests/apitests/gdi32/GetPixel.c b/rostests/apitests/gdi32/GetPixel.c new file mode 100644 index 00000000000..f7dac23d666 --- /dev/null +++ b/rostests/apitests/gdi32/GetPixel.c @@ -0,0 +1,39 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL - See COPYING in the top level directory + * PURPOSE: Test for SetDIBits + * PROGRAMMERS: Jérôme Gardou + */ + +#include +#include +#include + + +void Test_GetPixel_1bpp() +{ + HDC hdc; + HBITMAP hbmp; + char buffer[] = {0x80, 0x0}; + COLORREF color; + + hbmp = CreateBitmap(2,1,1,1,buffer); + ok(hbmp != NULL, "Failed to create a monochrom bitmap...\n"); + hdc = CreateCompatibleDC(0); + hbmp = SelectObject(hdc, hbmp); + ok(hbmp != NULL, "Could not select the bitmap into the DC.\n"); + + color = GetPixel(hdc, 0, 0); + ok(color == 0xFFFFFF, "Wrong color at 0,0 : 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1, 0); + ok(color == 0, "Wrong color at 1,0 : 0x%08x\n", (UINT)color); + + hbmp = SelectObject(hdc, hbmp); + DeleteObject(hbmp); + DeleteDC(hdc); +} + +START_TEST(GetPixel) +{ + Test_GetPixel_1bpp(); +} diff --git a/rostests/apitests/gdi32/SetDIBits.c b/rostests/apitests/gdi32/SetDIBits.c index fb6bfdb8029..50fcc52374a 100644 --- a/rostests/apitests/gdi32/SetDIBits.c +++ b/rostests/apitests/gdi32/SetDIBits.c @@ -50,7 +50,94 @@ void Test_SetDIBits() DeleteObject(hbmp); } +void Test_SetDIBits_1bpp() +{ + char buffer[sizeof(BITMAPINFOHEADER)+2*sizeof(RGBQUAD)]; + HDC hdc; + BITMAPINFO* pBMI = (BITMAPINFO*)buffer; + char bits1bpp[] = {0x80, 0, 0, 0}; + HBITMAP hbmp; + int ret; + COLORREF color; + + hdc = CreateCompatibleDC(0); + if(!hdc) + { + trace("No device contexr !?\n"); + return; + } + + ZeroMemory(buffer, sizeof(buffer)); + + pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); + pBMI->bmiHeader.biWidth=2; + pBMI->bmiHeader.biHeight=1; + pBMI->bmiHeader.biPlanes=1; + pBMI->bmiHeader.biBitCount=1; + pBMI->bmiHeader.biCompression=BI_RGB; + pBMI->bmiHeader.biSizeImage=0; + pBMI->bmiHeader.biXPelsPerMeter=0; + pBMI->bmiHeader.biYPelsPerMeter=0; + pBMI->bmiHeader.biClrUsed=2; + pBMI->bmiHeader.biClrImportant=0; + pBMI->bmiColors[0].rgbBlue = 0xFF; + pBMI->bmiColors[0].rgbGreen = 0xFF; + pBMI->bmiColors[0].rgbRed = 0xFF; + + hbmp = CreateBitmap(2, 1, 1, 1, NULL); + ok(hbmp!=NULL, "Failed to create a monochrome bitmap\n"); + + ret = SetDIBits(NULL, hbmp, 0, 1, bits1bpp, pBMI, DIB_RGB_COLORS); + ok(ret == 1, "Copied %i scanlines\n", ret); + + hbmp = SelectObject(hdc, hbmp); + ok(hbmp != NULL, "Could not select the bitmap into the context.\n"); + color = GetPixel(hdc, 0,0); + ok(color == 0, "Wrong color at 0,0 : 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1,0); + ok(color == 0xFFFFFF, "Wrong color at 1,0 : 0x%08x\n", (UINT)color); + + hbmp = SelectObject(hdc, hbmp); + + /* Try something else than 0xFFFFFF */ + pBMI->bmiColors[0].rgbBlue = 0xFF; + pBMI->bmiColors[0].rgbGreen = 0; + pBMI->bmiColors[0].rgbRed = 0; + + ret = SetDIBits(NULL, hbmp, 0, 1, bits1bpp, pBMI, DIB_RGB_COLORS); + ok(ret == 1, "Copied %i scanlines\n", ret); + + hbmp = SelectObject(hdc, hbmp); + ok(hbmp != NULL, "Could not select the bitmap into the context.\n"); + color = GetPixel(hdc, 0,0); + ok(color == 0, "Wrong color at 0,0 : 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1,0); + ok(color == 0xFFFFFF, "Wrong color at 1,0 : 0x%08x\n", (UINT)color); + + hbmp = SelectObject(hdc, hbmp); + + /* Special : try 0 */ + pBMI->bmiColors[0].rgbBlue = 0; + pBMI->bmiColors[0].rgbGreen = 0; + pBMI->bmiColors[0].rgbRed = 0; + + ret = SetDIBits(NULL, hbmp, 0, 1, bits1bpp, pBMI, DIB_RGB_COLORS); + ok(ret == 1, "Copied %i scanlines\n", ret); + + hbmp = SelectObject(hdc, hbmp); + ok(hbmp != NULL, "Could not select the bitmap into the context.\n"); + color = GetPixel(hdc, 0,0); + ok(color == 0, "Wrong color at 0,0 : 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1,0); + ok(color == 0xFFFFFF, "Wrong color at 1,0 : 0x%08x\n", (UINT)color); + + hbmp = SelectObject(hdc, hbmp); + DeleteObject(hbmp); + DeleteDC(hdc); +} + START_TEST(SetDIBits) { Test_SetDIBits(); + Test_SetDIBits_1bpp(); } diff --git a/rostests/apitests/gdi32/gdi32_apitest.rbuild b/rostests/apitests/gdi32/gdi32_apitest.rbuild index 25dc88f055f..18327f64d12 100644 --- a/rostests/apitests/gdi32/gdi32_apitest.rbuild +++ b/rostests/apitests/gdi32/gdi32_apitest.rbuild @@ -41,6 +41,7 @@ GetCurrentObject.c GetDIBits.c GetObject.c + GetPixel.c GetStockObject.c GetTextExtentExPoint.c GetTextFace.c diff --git a/rostests/apitests/gdi32/testlist.c b/rostests/apitests/gdi32/testlist.c index c9b59d3a0ae..fc99d87d0e7 100644 --- a/rostests/apitests/gdi32/testlist.c +++ b/rostests/apitests/gdi32/testlist.c @@ -36,6 +36,7 @@ extern void func_GdiSetAttrs(void); extern void func_GetClipRgn(void); extern void func_GetCurrentObject(void); extern void func_GetDIBits(void); +extern void func_GetPixel(void); extern void func_GetObject(void); extern void func_GetStockObject(void); extern void func_GetTextExtentExPoint(void); @@ -82,6 +83,7 @@ const struct test winetest_testlist[] = { "GetClipRgn", func_GetClipRgn }, { "GetCurrentObject", func_GetCurrentObject }, { "GetDIBits", func_GetDIBits }, + { "GetPixel", func_GetPixel }, { "GetObject", func_GetObject }, { "GetStockObject", func_GetStockObject }, { "GetTextExtentExPoint", func_GetTextExtentExPoint },