Module: wine Branch: master Commit: 6f630a40911c6c59f9422f6db284fb32c4138104 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f630a40911c6c59f9422f6db2...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Mon Aug 20 12:08:17 2012 +0900
gdiplus: GdipGetImageThumbnail should return image in 32bppPARGB format.
---
dlls/gdiplus/image.c | 2 +- dlls/gdiplus/tests/image.c | 79 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 1ee5cbc..d6e9faf 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -4393,7 +4393,7 @@ GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage *image, UINT width, UINT heigh GdipGetImageWidth(image, &srcwidth); GdipGetImageHeight(image, &srcheight);
- stat = GdipCreateBitmapFromScan0(width, height, 0, PixelFormat32bppARGB, + stat = GdipCreateBitmapFromScan0(width, height, 0, PixelFormat32bppPARGB, NULL, (GpBitmap**)ret_image);
if (stat == Ok) diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 9e90cca..4e65b5e 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -3712,6 +3712,84 @@ static void test_GdipDrawImagePointRect(void) expect(Ok, status); }
+static void test_image_format(void) +{ + static const PixelFormat fmt[] = + { + PixelFormat1bppIndexed, PixelFormat4bppIndexed, PixelFormat8bppIndexed, + PixelFormat16bppGrayScale, PixelFormat16bppRGB555, PixelFormat16bppRGB565, + PixelFormat16bppARGB1555, PixelFormat24bppRGB, PixelFormat32bppRGB, + PixelFormat32bppARGB, PixelFormat32bppPARGB, PixelFormat48bppRGB, + PixelFormat64bppARGB, PixelFormat64bppPARGB, PixelFormat32bppCMYK + }; + GpStatus status; + GpBitmap *bitmap; + GpImage *thumb; + HBITMAP hbitmap; + BITMAP bm; + PixelFormat format; + BitmapData data; + UINT i, ret; + + for (i = 0; i < sizeof(fmt)/sizeof(fmt[0]); i++) + { + status = GdipCreateBitmapFromScan0(1, 1, 0, fmt[i], NULL, &bitmap); + ok(status == Ok || broken(status == InvalidParameter) /* before win7 */, + "GdipCreateBitmapFromScan0 error %d\n", status); + if (status != Ok) continue; + + status = GdipGetImagePixelFormat((GpImage *)bitmap, &format); + expect(Ok, status); + expect(fmt[i], format); + + status = GdipCreateHBITMAPFromBitmap(bitmap, &hbitmap, 0); + if (fmt[i] == PixelFormat16bppGrayScale || fmt[i] == PixelFormat32bppCMYK) + todo_wine expect(InvalidParameter, status); + else + { + expect(Ok, status); + ret = GetObject(hbitmap, sizeof(bm), &bm); + expect(sizeof(bm), ret); + expect(0, bm.bmType); + expect(1, bm.bmWidth); + expect(1, bm.bmHeight); + expect(4, bm.bmWidthBytes); + expect(1, bm.bmPlanes); + expect(32, bm.bmBitsPixel); + DeleteObject(hbitmap); + } + + status = GdipGetImageThumbnail((GpImage *)bitmap, 0, 0, &thumb, NULL, NULL); + if (fmt[i] == PixelFormat16bppGrayScale || fmt[i] == PixelFormat32bppCMYK) + todo_wine + ok(status == OutOfMemory || broken(status == InvalidParameter) /* before win7 */, + "expected OutOfMemory, got %d\n", status); + else + { + expect(Ok, status); + status = GdipGetImagePixelFormat(thumb, &format); + expect(Ok, status); + ok(format == PixelFormat32bppPARGB || broken(format != PixelFormat32bppPARGB) /* before win7 */, + "expected PixelFormat32bppPARGB, got %#x\n", format); + status = GdipDisposeImage(thumb); + expect(Ok, status); + } + + status = GdipBitmapLockBits(bitmap, NULL, ImageLockModeRead, PixelFormat32bppPARGB, &data); + if (fmt[i] == PixelFormat16bppGrayScale || fmt[i] == PixelFormat32bppCMYK) + todo_wine expect(InvalidParameter, status); + else + { + expect(Ok, status); + status = GdipBitmapUnlockBits(bitmap, &data); + expect(Ok, status); + } + + status = GdipDisposeImage((GpImage *)bitmap); + expect(Ok, status); + } +} + START_TEST(image) { struct GdiplusStartupInput gdiplusStartupInput; @@ -3724,6 +3802,7 @@ START_TEST(image)
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
+ test_image_format(); test_DrawImage(); test_GdipDrawImagePointRect(); test_bitmapbits();