Vincent Povirk : gdiplus: Implement GdipCreateBitmapFromHBITMAP for 16-bit dibs.
Alexandre Julliard
julliard at winehq.org
Thu Jan 12 13:19:20 CST 2012
Module: wine
Branch: master
Commit: 2540049777311b95d6857faf058f04aac1174758
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2540049777311b95d6857faf058f04aac1174758
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Wed Jan 11 13:41:19 2012 -0600
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)
{
More information about the wine-cvs
mailing list