Commit 50c9ff03 authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

Fix some weird logic in ImageList_Write.

parent ac24a0a6
...@@ -450,7 +450,7 @@ BOOL WINAPI ...@@ -450,7 +450,7 @@ BOOL WINAPI
ImageList_Copy (HIMAGELIST himlDst, INT iDst, HIMAGELIST himlSrc, ImageList_Copy (HIMAGELIST himlDst, INT iDst, HIMAGELIST himlSrc,
INT iSrc, UINT uFlags) INT iSrc, UINT uFlags)
{ {
TRACE("iDst=%d iSrc=%d\n", iDst, iSrc); TRACE("himlDst=%p iDst=%d himlSrc=%p iSrc=%d\n", himlDst, iDst, himlSrc, iSrc);
if (!is_valid(himlSrc) || !is_valid(himlDst)) if (!is_valid(himlSrc) || !is_valid(himlDst))
return FALSE; return FALSE;
...@@ -2650,8 +2650,8 @@ _write_bitmap(HBITMAP hBitmap, LPSTREAM pstm, int cx, int cy) ...@@ -2650,8 +2650,8 @@ _write_bitmap(HBITMAP hBitmap, LPSTREAM pstm, int cx, int cy)
/* XXX is this always correct? */ /* XXX is this always correct? */
icount = bm.bmWidth / cx; icount = bm.bmWidth / cx;
nwidth = cx << 2; nwidth = cx;
nheight = cy * ((icount+3)>>2); nheight = cy * icount;
bitCount = bm.bmBitsPixel == 1 ? 1 : 24; bitCount = bm.bmBitsPixel == 1 ? 1 : 24;
sizeImage = ((((bm.bmWidth * bitCount)+31) & ~31) >> 3) * bm.bmHeight; sizeImage = ((((bm.bmWidth * bitCount)+31) & ~31) >> 3) * bm.bmHeight;
...@@ -2682,13 +2682,13 @@ _write_bitmap(HBITMAP hBitmap, LPSTREAM pstm, int cx, int cy) ...@@ -2682,13 +2682,13 @@ _write_bitmap(HBITMAP hBitmap, LPSTREAM pstm, int cx, int cy)
bmih->biPlanes = 1; bmih->biPlanes = 1;
bmih->biBitCount = bitCount; bmih->biBitCount = bitCount;
bmih->biCompression = BI_RGB; bmih->biCompression = BI_RGB;
bmih->biSizeImage = nsizeImage; bmih->biSizeImage = sizeImage;
bmih->biXPelsPerMeter = 0; bmih->biXPelsPerMeter = 0;
bmih->biYPelsPerMeter = 0; bmih->biYPelsPerMeter = 0;
bmih->biClrUsed = 0; bmih->biClrUsed = 0;
bmih->biClrImportant = 0; bmih->biClrImportant = 0;
lpBitsOrg = (LPBYTE)LocalAlloc(LMEM_ZEROINIT, nsizeImage); lpBitsOrg = (LPBYTE)LocalAlloc(LMEM_ZEROINIT, sizeImage);
if(!GetDIBits(xdc, hBitmap, 0, bm.bmHeight, lpBitsOrg, if(!GetDIBits(xdc, hBitmap, 0, bm.bmHeight, lpBitsOrg,
(BITMAPINFO *)bmih, DIB_RGB_COLORS)) (BITMAPINFO *)bmih, DIB_RGB_COLORS))
goto failed; goto failed;
...@@ -2706,6 +2706,7 @@ _write_bitmap(HBITMAP hBitmap, LPSTREAM pstm, int cx, int cy) ...@@ -2706,6 +2706,7 @@ _write_bitmap(HBITMAP hBitmap, LPSTREAM pstm, int cx, int cy)
bmih->biWidth = nwidth; bmih->biWidth = nwidth;
bmih->biHeight = nheight; bmih->biHeight = nheight;
bmih->biSizeImage = nsizeImage;
if(bitCount == 1) { if(bitCount == 1) {
/* Hack. */ /* Hack. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment