From 1826530974621d0b9cbdad7397f4c292b2023bdd Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 14 Oct 2010 10:13:58 +0200 Subject: [PATCH] comctl32: Use the appropriate color format when loading a DIB in ImageList_LoadImageW. --- dlls/comctl32/imagelist.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c index 9396b956085..2e1581e7eee 100644 --- a/dlls/comctl32/imagelist.c +++ b/dlls/comctl32/imagelist.c @@ -1907,8 +1907,11 @@ ImageList_LoadImageW (HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow, } if (uType == IMAGE_BITMAP) { - BITMAP bmp; - GetObjectW (handle, sizeof(BITMAP), &bmp); + DIBSECTION dib; + UINT color; + + if (GetObjectW (handle, sizeof(dib), &dib) == sizeof(BITMAP)) color = ILC_COLOR; + else color = dib.dsBm.bmBitsPixel; /* To match windows behavior, if cx is set to zero and the flag DI_DEFAULTSIZE is specified, cx becomes the @@ -1919,13 +1922,12 @@ ImageList_LoadImageW (HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow, if (uFlags & DI_DEFAULTSIZE) cx = GetSystemMetrics (SM_CXICON); else - cx = bmp.bmHeight; + cx = dib.dsBm.bmHeight; } - nImageCount = bmp.bmWidth / cx; + nImageCount = dib.dsBm.bmWidth / cx; - himl = ImageList_Create (cx, bmp.bmHeight, ILC_MASK | ILC_COLOR, - nImageCount, cGrow); + himl = ImageList_Create (cx, dib.dsBm.bmHeight, ILC_MASK | color, nImageCount, cGrow); if (!himl) { DeleteObject (handle); return NULL; -- 2.11.4.GIT