NearestIndexedColor metode
Finner den nærmeste oppføringen blant de fysiske palettslotter 8..63 og returnerer både dens offentlige ColorIndex-verdi og fysiske slot
Metoden er tilgjengelig på både IXLSWorkbook og TXLSXWorkbook og endrer ikke palett- eller arbeidsboktilstand
Syntaks
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Inndata
AArgb godtar en 24-bit $00RRGGBB-verdi eller en ugjennomsiktig $FFRRGGBB-verdi
En alfabyte med null normaliseres til $FF; delvis gjennomsiktige verdier avvises fordi indekserte palettoppføringer i arbeidsboken er ugjennomsiktige
Resultat
| Felt | Betydning |
|---|---|
InputARGB | Den normaliserte ugjennomsiktige inndatafargen |
ColorIndex | Den offentlige palettindeksen fra 1 til 56 |
PaletteSlot | Den fysiske BIFF- eller OOXML-palettslotten fra 8 til 63 |
ARGB | Den normaliserte ugjennomsiktige fargen som er lagret på den valgte palettslotten |
DistanceSquared | Den kvadrerte euklidiske avstanden i OKLab-fargerommet |
ExactMatch | Sann når den valgte oppføringen har de samme RGB-kanalene som det normaliserte inndataet |
Funksjonen returnerer usann for delvis gjennomsiktig inndata eller når palettbufferen ikke er tilgjengelig; ved feil settes ColorIndex til null og PaletteSlot til -1
Samsvarskontrakt
Hver arbeidsbok bufrer de normaliserte ARGB- og OKLab-koordinatene til sine 56 fysiske palettoppføringer
En palettilbakestilling bygger hele bufferen opp igjen, og en effektiv endring av én enkelt slot oppdaterer bare den bufrede slotten
Hver spørring konverterer inndataet én gang og utfører én fast gjennomsøking av 56 oppføringer, uten spørringshistorikk eller ubegrenset buffervekst
Lik avstand velger den laveste offentlige indeksen, også for duplikate palettfarger, slik at resultatene forblir deterministiske på tvers av motorer og kjøringer
Automatiske, system- og ugyldige fargetoken er ikke kandidater; bruk ResolveIndexedColor til å klassifisere disse verdiene
Eksempel
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;