[WIN32K:NTGDI] Handle RGB/BGR directly in PALETTE_ulGetNearestIndex

This commit is contained in:
Timo Kreuzer
2025-12-17 03:51:50 +02:00
parent 3e61bc2bed
commit f09fcc2a96
2 changed files with 7 additions and 1 deletions

View File

@@ -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);
}
}
}

View File

@@ -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