Module: wine Branch: master Commit: 2540049777311b95d6857faf058f04aac1174758 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2540049777311b95d6857faf05...
Author: Vincent Povirk vincent@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) {