NearestIndexedColor metode
Finder den nærmeste indgang blandt de fysiske paletslots 8..63 og returnerer både dens offentlige ColorIndex-værdi og fysiske slot
Metoden er tilgængelig på både IXLSWorkbook og TXLSXWorkbook og ændrer ikke palet- eller projektmappetilstand
Syntaks
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Input
AArgb accepterer en 24-bit $00RRGGBB-værdi eller en uigennemsigtig $FFRRGGBB-værdi
En nul-alphabyte normaliseres til $FF; delvist gennemsigtige værdier afvises, fordi projektmappens indekserede paletindgange er uigennemsigtige
Resultat
| Felt | Betydning |
|---|---|
InputARGB | Den normaliserede uigennemsigtige inputfarve |
ColorIndex | Det offentlige paletindeks fra 1 til og med 56 |
PaletteSlot | Det fysiske BIFF- eller OOXML-paletslot fra 8 til og med 63 |
ARGB | Den normaliserede uigennemsigtige farve, der er gemt på den valgte paletslot |
DistanceSquared | Den kvadrerede euklidiske afstand i OKLab-farverummet |
ExactMatch | True, når den valgte indgang har de samme RGB-kanaler som det normaliserede input |
Funktionen returnerer false for delvist gennemsigtigt input, eller når paletcachen er utilgængelig; ved fejl initialiseres ColorIndex til nul og PaletteSlot til -1
Matchningskontrakt
Hver projektmappe cacher de normaliserede ARGB- og OKLab-koordinater for sine 56 fysiske paletindgange
En paletnulstilling genopbygger den komplette cache, og en effektiv ændring af én enkelt slot opdaterer kun det cachede slot
Hver forespørgsel konverterer inputtet én gang og udfører én fast scanning af 56 indgange uden forespørgselshistorik eller ubegrænset cachevækst
Lige afstande vælger det laveste offentlige indeks, også ved duplikerede paletfarver, så resultaterne forbliver deterministiske på tværs af motorer og kørsler
Automatiske, system- og ugyldige farvetokens er ikke kandidater; brug ResolveIndexedColor til at klassificere disse værdier
Eksempel
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;