Vincent Povirk : gdiplus: Add test for GdipCreateBitmapFromGdiDib.

Alexandre Julliard julliard at winehq.org
Mon Apr 26 13:59:30 CDT 2010


Module: wine
Branch: master
Commit: 800e9ff6c541b3708f8e460cf3218397a84ea6a1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=800e9ff6c541b3708f8e460cf3218397a84ea6a1

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Sat Apr 24 09:37:51 2010 -0500

gdiplus: Add test for GdipCreateBitmapFromGdiDib.

---

 dlls/gdiplus/image.c       |    3 +
 dlls/gdiplus/tests/image.c |  112 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 115 insertions(+), 0 deletions(-)

diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 0a73dcf..b0ba8ce 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -1220,6 +1220,9 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO* info,
 
     FIXME("(%p, %p, %p) - partially implemented\n", info, bits, bitmap);
 
+    if (!info || !bits || !bitmap)
+        return InvalidParameter;
+
     height = abs(info->bmiHeader.biHeight);
     stride = ((info->bmiHeader.biWidth * info->bmiHeader.biBitCount + 31) >> 3) & ~3;
 
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index 74e6ee1..cf2a6e1 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -158,6 +158,117 @@ static void test_Scan0(void)
     ok( !bm, "expected null bitmap\n" );
 }
 
+static void test_FromGdiDib(void)
+{
+    GpBitmap *bm;
+    GpStatus stat;
+    BYTE buff[400];
+    BYTE rbmi[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];
+    BITMAPINFO *bmi = (BITMAPINFO*)rbmi;
+    PixelFormat format;
+
+    bm = NULL;
+
+    memset(rbmi, 0, sizeof(rbmi));
+
+    bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+    bmi->bmiHeader.biWidth = 10;
+    bmi->bmiHeader.biHeight = 10;
+    bmi->bmiHeader.biPlanes = 1;
+    bmi->bmiHeader.biBitCount = 32;
+    bmi->bmiHeader.biCompression = BI_RGB;
+
+    stat = GdipCreateBitmapFromGdiDib(NULL, buff, &bm);
+    expect(InvalidParameter, stat);
+
+    stat = GdipCreateBitmapFromGdiDib(bmi, NULL, &bm);
+    expect(InvalidParameter, stat);
+
+    stat = GdipCreateBitmapFromGdiDib(bmi, buff, NULL);
+    expect(InvalidParameter, stat);
+
+    stat = GdipCreateBitmapFromGdiDib(bmi, buff, &bm);
+    todo_wine expect(Ok, stat);
+    todo_wine ok(NULL != bm, "Expected bitmap to be initialized\n");
+    if (stat == Ok)
+    {
+        stat = GdipGetImagePixelFormat((GpImage*)bm, &format);
+        expect(Ok, stat);
+        expect(PixelFormat32bppRGB, format);
+
+        GdipDisposeImage((GpImage*)bm);
+    }
+
+    bmi->bmiHeader.biBitCount = 24;
+    stat = GdipCreateBitmapFromGdiDib(bmi, buff, &bm);
+    expect(Ok, stat);
+    ok(NULL != bm, "Expected bitmap to be initialized\n");
+    if (stat == Ok)
+    {
+        stat = GdipGetImagePixelFormat((GpImage*)bm, &format);
+        expect(Ok, stat);
+        expect(PixelFormat24bppRGB, format);
+
+        GdipDisposeImage((GpImage*)bm);
+    }
+
+    bmi->bmiHeader.biBitCount = 16;
+    stat = GdipCreateBitmapFromGdiDib(bmi, buff, &bm);
+    todo_wine expect(Ok, stat);
+    todo_wine ok(NULL != bm, "Expected bitmap to be initialized\n");
+    if (stat == Ok)
+    {
+        stat = GdipGetImagePixelFormat((GpImage*)bm, &format);
+        expect(Ok, stat);
+        expect(PixelFormat16bppRGB555, format);
+
+        GdipDisposeImage((GpImage*)bm);
+    }
+
+    bmi->bmiHeader.biBitCount = 8;
+    stat = GdipCreateBitmapFromGdiDib(bmi, buff, &bm);
+    expect(Ok, stat);
+    ok(NULL != bm, "Expected bitmap to be initialized\n");
+    if (stat == Ok)
+    {
+        stat = GdipGetImagePixelFormat((GpImage*)bm, &format);
+        expect(Ok, stat);
+        expect(PixelFormat8bppIndexed, format);
+
+        GdipDisposeImage((GpImage*)bm);
+    }
+
+    bmi->bmiHeader.biBitCount = 4;
+    stat = GdipCreateBitmapFromGdiDib(bmi, buff, &bm);
+    expect(Ok, stat);
+    ok(NULL != bm, "Expected bitmap to be initialized\n");
+    if (stat == Ok)
+    {
+        stat = GdipGetImagePixelFormat((GpImage*)bm, &format);
+        expect(Ok, stat);
+        expect(PixelFormat4bppIndexed, format);
+
+        GdipDisposeImage((GpImage*)bm);
+    }
+
+    bmi->bmiHeader.biBitCount = 1;
+    stat = GdipCreateBitmapFromGdiDib(bmi, buff, &bm);
+    expect(Ok, stat);
+    ok(NULL != bm, "Expected bitmap to be initialized\n");
+    if (stat == Ok)
+    {
+        stat = GdipGetImagePixelFormat((GpImage*)bm, &format);
+        expect(Ok, stat);
+        expect(PixelFormat1bppIndexed, format);
+
+        GdipDisposeImage((GpImage*)bm);
+    }
+
+    bmi->bmiHeader.biBitCount = 0;
+    stat = GdipCreateBitmapFromGdiDib(bmi, buff, &bm);
+    expect(InvalidParameter, stat);
+}
+
 static void test_GetImageDimension(void)
 {
     GpBitmap *bm;
@@ -1901,6 +2012,7 @@ START_TEST(image)
     GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
 
     test_Scan0();
+    test_FromGdiDib();
     test_GetImageDimension();
     test_GdipImageGetFrameDimensionsCount();
     test_LoadingImages();




More information about the wine-cvs mailing list