From e1d7a14438f33a873c53d0d696f0e2737483f92c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 25 Feb 2011 00:01:35 +0000 Subject: [PATCH] =?UTF-8?q?[[WIN32K]=20Fix=20biCompression=20filed=20in=20?= =?UTF-8?q?the=20DIBSECTION=20structure,=20returned=20by=20BITMAP=5FGetObj?= =?UTF-8?q?ect.=20Fixes=20K-Meleon=20toobar.=20Kudos=20for=20the=20fix=20g?= =?UTF-8?q?o=20to=20Rafa=C5=82=20Harabie=C5=84.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See issue #5940 for more details. svn path=/trunk/; revision=50896 --- .../subsystems/win32/win32k/objects/bitmaps.c | 70 +++++++++++-------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index 0b3f56e7d6f..583b9514f4d 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -920,36 +920,46 @@ BITMAP_GetObject(SURFACE *psurf, INT Count, LPVOID buffer) pds->dsBmih.biHeight = pds->dsBm.bmHeight; pds->dsBmih.biPlanes = pds->dsBm.bmPlanes; pds->dsBmih.biBitCount = pds->dsBm.bmBitsPixel; - if(psurf->ppal->flFlags & PAL_BITFIELDS) - { - pds->dsBmih.biCompression = BI_BITFIELDS; - } - else - { - switch (psurf->SurfObj.iBitmapFormat) - { - case BMF_1BPP: - case BMF_4BPP: - case BMF_8BPP: - case BMF_16BPP: - case BMF_24BPP: - case BMF_32BPP: - pds->dsBmih.biCompression = BI_RGB; - break; - case BMF_4RLE: - pds->dsBmih.biCompression = BI_RLE4; - break; - case BMF_8RLE: - pds->dsBmih.biCompression = BI_RLE8; - break; - case BMF_JPEG: - pds->dsBmih.biCompression = BI_JPEG; - break; - case BMF_PNG: - pds->dsBmih.biCompression = BI_PNG; - break; - } - } + + switch (psurf->SurfObj.iBitmapFormat) + { + case BMF_1BPP: + case BMF_4BPP: + case BMF_8BPP: + case BMF_24BPP: + pds->dsBmih.biCompression = BI_RGB; + break; + + case BMF_16BPP: + if (psurf->ppal->flFlags & PAL_RGB16_555) + pds->dsBmih.biCompression = BI_RGB; + else + pds->dsBmih.biCompression = BI_BITFIELDS; + break; + + case BMF_32BPP: + if (psurf->ppal->flFlags & PAL_RGB) + pds->dsBmih.biCompression = BI_RGB; + else + pds->dsBmih.biCompression = BI_BITFIELDS; + break; + + case BMF_4RLE: + pds->dsBmih.biCompression = BI_RLE4; + break; + case BMF_8RLE: + pds->dsBmih.biCompression = BI_RLE8; + break; + case BMF_JPEG: + pds->dsBmih.biCompression = BI_JPEG; + break; + case BMF_PNG: + pds->dsBmih.biCompression = BI_PNG; + break; + default: + ASSERT(FALSE); /* this shouldn't happen */ + } + pds->dsBmih.biSizeImage = psurf->SurfObj.cjBits; pds->dsBmih.biXPelsPerMeter = 0; pds->dsBmih.biYPelsPerMeter = 0;