[2/2] gdiplus: Implement GdipCreateBitmapFromHBITMAP for 16-bit dibs.
Vincent Povirk
vincent at codeweavers.com
Wed Jan 11 14:02:25 CST 2012
-------------- next part --------------
From 2a6613c9e32196b57be019efffdd510987f3d333 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Wed, 11 Jan 2012 13:41:19 -0600
Subject: [PATCH 2/2] gdiplus: Implement GdipCreateBitmapFromHBITMAP for 16-bit dibs.
---
dlls/gdiplus/image.c | 31 +++++++++++++++++++++++++++++++
dlls/gdiplus/tests/image.c | 6 +++---
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 0e3848f..aba8366 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -3526,6 +3526,7 @@ GpStatus WINGDIPAPI GdipGetEncoderParameterListSize(GpImage *image,
GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBitmap** bitmap)
{
BITMAP bm;
+ DIBSECTION dib;
GpStatus retval;
PixelFormat format;
BitmapData lockeddata;
@@ -3550,6 +3551,36 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi
case 8:
format = PixelFormat8bppIndexed;
break;
+ case 16:
+ {
+ if (GetObjectA(hbm, sizeof(dib), &dib) == sizeof(dib))
+ {
+ if (dib.dsBitfields[0] == 0x7c00 &&
+ dib.dsBitfields[1] == 0x3e0 &&
+ dib.dsBitfields[2] == 0x1f)
+ {
+ format = PixelFormat16bppRGB555;
+ }
+ else if (dib.dsBitfields[0] == 0xf800 &&
+ dib.dsBitfields[1] == 0x7e0 &&
+ dib.dsBitfields[2] == 0x1f)
+ {
+ format = PixelFormat16bppRGB565;
+ }
+ else
+ {
+ FIXME("unrecognized bitfields %x,%x,%x\n", dib.dsBitfields[0],
+ dib.dsBitfields[1], dib.dsBitfields[2]);
+ return InvalidParameter;
+ }
+ }
+ else
+ {
+ FIXME("unimplemented for 16-bit ddb\n");
+ return InvalidParameter;
+ }
+ break;
+ }
case 24:
format = PixelFormat24bppRGB;
break;
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index 78a73c9..b6262d1 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -949,7 +949,7 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
bits[0] = 0;
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
- todo_wine expect(Ok, stat);
+ expect(Ok, stat);
if (stat == Ok)
{
@@ -979,7 +979,7 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
bits[0] = 0;
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
- todo_wine expect(Ok, stat);
+ expect(Ok, stat);
if (stat == Ok)
{
@@ -1007,7 +1007,7 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
bits[0] = 0;
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
- todo_wine expect(Ok, stat);
+ expect(Ok, stat);
if (stat == Ok)
{
--
1.7.4.1
More information about the wine-patches
mailing list