DIB_FixColorsToLoadflags: Support bitmaps with a BITMAPCOREHEADER
properly.
This commit is contained in:
parent
531dbbd8e7
commit
469b41f24c
@ -773,7 +773,7 @@ static HICON CURSORICON_CreateFromResource( HMODULE16 hModule, HGLOBAL16 hObj, L
|
|||||||
bmi->bmiHeader.biBitCount ) * abs( bmi->bmiHeader.biHeight ) / 2;
|
bmi->bmiHeader.biBitCount ) * abs( bmi->bmiHeader.biHeight ) / 2;
|
||||||
|
|
||||||
pInfo->bmiHeader.biBitCount = 1;
|
pInfo->bmiHeader.biBitCount = 1;
|
||||||
if (pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER))
|
if (pInfo->bmiHeader.biSize != sizeof(BITMAPCOREHEADER))
|
||||||
{
|
{
|
||||||
RGBQUAD *rgb = pInfo->bmiColors;
|
RGBQUAD *rgb = pInfo->bmiColors;
|
||||||
|
|
||||||
@ -2010,28 +2010,44 @@ static void DIB_FixColorsToLoadflags(BITMAPINFO * bmi, UINT loadflags, BYTE pix)
|
|||||||
COLORREF c_W, c_S, c_F, c_L, c_C;
|
COLORREF c_W, c_S, c_F, c_L, c_C;
|
||||||
int incr,i;
|
int incr,i;
|
||||||
RGBQUAD *ptr;
|
RGBQUAD *ptr;
|
||||||
|
int bitmap_type;
|
||||||
|
LONG width;
|
||||||
|
LONG height;
|
||||||
|
WORD bpp;
|
||||||
|
DWORD compr;
|
||||||
|
|
||||||
if (bmi->bmiHeader.biBitCount > 8) return;
|
if (((bitmap_type = DIB_GetBitmapInfo((BITMAPINFOHEADER*) bmi, &width, &height, &bpp, &compr)) == -1))
|
||||||
if (bmi->bmiHeader.biSize == sizeof(BITMAPINFOHEADER)) incr = 4;
|
{
|
||||||
else if (bmi->bmiHeader.biSize == sizeof(BITMAPCOREHEADER)) incr = 3;
|
WARN_(resource)("Invalid bitmap\n");
|
||||||
else {
|
return;
|
||||||
WARN_(resource)("Wrong bitmap header size!\n");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
colors = bmi->bmiHeader.biClrUsed;
|
|
||||||
if (!colors && (bmi->bmiHeader.biBitCount <= 8))
|
if (bpp > 8) return;
|
||||||
colors = 1 << bmi->bmiHeader.biBitCount;
|
|
||||||
|
if (bitmap_type == 0) /* BITMAPCOREHEADER */
|
||||||
|
{
|
||||||
|
incr = 3;
|
||||||
|
colors = 1 << bpp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
incr = 4;
|
||||||
|
colors = bmi->bmiHeader.biClrUsed;
|
||||||
|
if (!colors && (bpp <= 8)) colors = 1 << bpp;
|
||||||
|
}
|
||||||
|
|
||||||
c_W = GetSysColor(COLOR_WINDOW);
|
c_W = GetSysColor(COLOR_WINDOW);
|
||||||
c_S = GetSysColor(COLOR_3DSHADOW);
|
c_S = GetSysColor(COLOR_3DSHADOW);
|
||||||
c_F = GetSysColor(COLOR_3DFACE);
|
c_F = GetSysColor(COLOR_3DFACE);
|
||||||
c_L = GetSysColor(COLOR_3DLIGHT);
|
c_L = GetSysColor(COLOR_3DLIGHT);
|
||||||
|
|
||||||
if (loadflags & LR_LOADTRANSPARENT) {
|
if (loadflags & LR_LOADTRANSPARENT) {
|
||||||
switch (bmi->bmiHeader.biBitCount) {
|
switch (bpp) {
|
||||||
case 1: pix = pix >> 7; break;
|
case 1: pix = pix >> 7; break;
|
||||||
case 4: pix = pix >> 4; break;
|
case 4: pix = pix >> 4; break;
|
||||||
case 8: break;
|
case 8: break;
|
||||||
default:
|
default:
|
||||||
WARN_(resource)("(%d): Unsupported depth\n", bmi->bmiHeader.biBitCount);
|
WARN_(resource)("(%d): Unsupported depth\n", bpp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (pix >= colors) {
|
if (pix >= colors) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user