HotXLS-dokumentation

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

FeltBetydning
InputARGBDen normaliserede uigennemsigtige inputfarve
ColorIndexDet offentlige paletindeks fra 1 til og med 56
PaletteSlotDet fysiske BIFF- eller OOXML-paletslot fra 8 til og med 63
ARGBDen normaliserede uigennemsigtige farve, der er gemt på den valgte paletslot
DistanceSquaredDen kvadrerede euklidiske afstand i OKLab-farverummet
ExactMatchTrue, 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;

Se også