diff --git a/win32ss/gdi/eng/xlateobj.c b/win32ss/gdi/eng/xlateobj.c index 2fcdcc1291f..8677af8f66e 100644 --- a/win32ss/gdi/eng/xlateobj.c +++ b/win32ss/gdi/eng/xlateobj.c @@ -511,7 +511,7 @@ EXLATEOBJ_vInitialize( ulColor = RGB(ppalSrc->IndexedColors[i].peRed, ppalSrc->IndexedColors[i].peGreen, ppalSrc->IndexedColors[i].peBlue); - pexlo->xlo.pulXlate[i] = PALETTE_ulGetNearestBitFieldsIndex(ppalDst, ulColor); + pexlo->xlo.pulXlate[i] = PALETTE_ulGetNearestIndex(ppalDst, ulColor); } } } diff --git a/win32ss/gdi/ntgdi/palette.c b/win32ss/gdi/ntgdi/palette.c index ac8b625792f..05832f99142 100644 --- a/win32ss/gdi/ntgdi/palette.c +++ b/win32ss/gdi/ntgdi/palette.c @@ -263,6 +263,7 @@ PALETTE_ulGetNearestPaletteIndex(PALETTE* ppal, ULONG iColor) ULONG ulDiff, ulColorDiff, ulMinimalDiff = 0xFFFFFF; ULONG i, ulBestIndex = 0; PALETTEENTRY peColor = *(PPALETTEENTRY)&iColor; + ASSERT(ppal->flFlags & PAL_INDEXED); /* Loop all palette entries */ for (i = 0; i < ppal->NumColors; i++) @@ -294,6 +295,7 @@ NTAPI PALETTE_ulGetNearestBitFieldsIndex(PALETTE* ppal, ULONG ulColor) { ULONG ulNewColor; + ASSERT(ppal->flFlags & PAL_BITFIELDS); // FIXME: HACK, should be stored already ppal->ulRedShift = CalculateShift(RGB(0xff,0,0), ppal->RedMask); @@ -311,6 +313,10 @@ ULONG NTAPI PALETTE_ulGetNearestIndex(PALETTE* ppal, ULONG ulColor) { + if (ppal->flFlags & PAL_RGB) + return ulColor; + if (ppal->flFlags & PAL_BGR) + return RGB(GetBValue(ulColor), GetGValue(ulColor), GetRValue(ulColor)); if (ppal->flFlags & PAL_INDEXED) // Use fl & PALINDEXED return PALETTE_ulGetNearestPaletteIndex(ppal, ulColor); else