gdiplus: Fix GdipCreateBitmapFromHBITMAP flipping images vertically.

GdipCreateBitmapFromHBITMAP currently assumes that all bitmaps are
top-down, even though a positive height (which it also assumes)
signals a bottom-up DIB. The net result is that
GdipCreateBitmapFromHBITMAP flips images vertically.
This commit is contained in:
Vincent Povirk 2009-02-17 14:39:17 -06:00 committed by Alexandre Julliard
parent 65750fabbb
commit f365ef46f0
1 changed files with 11 additions and 2 deletions

View File

@ -1499,6 +1499,7 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi
BITMAP bm;
GpStatus retval;
PixelFormat format;
BYTE* bits;
TRACE("%p %p %p\n", hbm, hpal, bitmap);
@ -1539,8 +1540,16 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi
return InvalidParameter;
}
retval = GdipCreateBitmapFromScan0(bm.bmWidth, bm.bmHeight, bm.bmWidthBytes,
format, bm.bmBits, bitmap);
if (bm.bmBits)
bits = (BYTE*)bm.bmBits + (bm.bmHeight - 1) * bm.bmWidthBytes;
else
{
FIXME("can only get image data from DIB sections\n");
bits = NULL;
}
retval = GdipCreateBitmapFromScan0(bm.bmWidth, bm.bmHeight, -bm.bmWidthBytes,
format, bits, bitmap);
return retval;
}