diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 6ab2f6cd306..1dfa5344ad8 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -1750,9 +1750,19 @@ BuildDIBPalette(CONST BITMAPINFO *bmi) else if (bmi->bmiHeader.biCompression == BI_BITFIELDS) { paletteType = PAL_BITFIELDS; - RedMask = pdwColors[0]; - GreenMask = pdwColors[1]; - BlueMask = pdwColors[2]; + if (bmi->bmiHeader.biSize >= sizeof(BITMAPV4HEADER)) + { + PBITMAPV4HEADER pV4Header = (PBITMAPV4HEADER)&bmi->bmiHeader; + RedMask = pV4Header->bV4RedMask; + GreenMask = pV4Header->bV4GreenMask; + BlueMask = pV4Header->bV4BlueMask; + } + else + { + RedMask = pdwColors[0]; + GreenMask = pdwColors[1]; + BlueMask = pdwColors[2]; + } } else { diff --git a/reactos/subsystems/win32/win32k/objects/palette.c b/reactos/subsystems/win32/win32k/objects/palette.c index 860813ce8f1..38a4532f417 100644 --- a/reactos/subsystems/win32/win32k/objects/palette.c +++ b/reactos/subsystems/win32/win32k/objects/palette.c @@ -197,6 +197,8 @@ PALETTE_AllocPalette(ULONG Mode, PalGDI->flFlags |= PAL_RGB16_565; else if (Red == 0xFF0000 && Green == 0xFF00 && Blue == 0xFF) PalGDI->flFlags |= PAL_BGR; + else if (Red == 0xFF && Green == 0xFF00 && Blue == 0xFF0000) + PalGDI->flFlags |= PAL_RGB; } PALETTE_UnlockPalette(PalGDI);