From bd601f9950c9d89e9c205f86e399dc283652392a Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Tue, 15 Jan 2013 12:48:56 +0800 Subject: [PATCH] gdiplus: Avoid not necessary memory allocation for BITMAPINFO. --- dlls/gdiplus/image.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 377cab15c98..b182405de54 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -4694,28 +4694,21 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi if (retval == Ok) { HDC hdc; - BITMAPINFO *pbmi; + char bmibuf[FIELD_OFFSET(BITMAPINFO, bmiColors[256])]; + BITMAPINFO *pbmi = (BITMAPINFO *)bmibuf; INT src_height; hdc = CreateCompatibleDC(NULL); - 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); + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biBitCount = 0; - src_height = abs(pbmi->bmiHeader.biHeight); - pbmi->bmiHeader.biHeight = -src_height; + GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS); - GetDIBits(hdc, hbm, 0, src_height, lockeddata.Scan0, pbmi, DIB_RGB_COLORS); + src_height = abs(pbmi->bmiHeader.biHeight); + pbmi->bmiHeader.biHeight = -src_height; - GdipFree(pbmi); - } - else - retval = OutOfMemory; + GetDIBits(hdc, hbm, 0, src_height, lockeddata.Scan0, pbmi, DIB_RGB_COLORS); DeleteDC(hdc); -- 2.11.4.GIT