diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 73f08b942b9..a8f43e328c6 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -4694,62 +4694,50 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi format, &lockeddata); if (retval == Ok) { - if (bm.bmBits) + HDC hdc; + HBITMAP oldhbm; + BITMAPINFO *pbmi; + INT src_height, dst_stride; + BYTE *dst_bits; + + hdc = CreateCompatibleDC(NULL); + oldhbm = SelectObject(hdc, hbm); + + pbmi = GdipAlloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); + + if (pbmi) { - for (y=0; ybmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biBitCount = 0; + + GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS); + + src_height = abs(pbmi->bmiHeader.biHeight); + + if (pbmi->bmiHeader.biHeight > 0) { - memcpy((BYTE*)lockeddata.Scan0+lockeddata.Stride*y, - (BYTE*)bm.bmBits+bm.bmWidthBytes*(bm.bmHeight-1-y), - bm.bmWidthBytes); - } - } - else - { - HDC hdc; - HBITMAP oldhbm; - BITMAPINFO *pbmi; - INT src_height, dst_stride; - BYTE *dst_bits; - - hdc = CreateCompatibleDC(NULL); - oldhbm = SelectObject(hdc, hbm); - - pbmi = GdipAlloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); - - if (pbmi) - { - pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - pbmi->bmiHeader.biBitCount = 0; - - GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS); - - src_height = abs(pbmi->bmiHeader.biHeight); - - if (pbmi->bmiHeader.biHeight > 0) - { - dst_bits = (BYTE*)lockeddata.Scan0+lockeddata.Stride*(src_height-1); - dst_stride = -lockeddata.Stride; - } - else - { - dst_bits = lockeddata.Scan0; - dst_stride = lockeddata.Stride; - } - - for (y=0; y