HotXLS-dokumentasjon

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

FeltBetydning
InputARGBDen normaliserte ugjennomsiktige inndatafargen
ColorIndexDen offentlige palettindeksen fra 1 til 56
PaletteSlotDen fysiske BIFF- eller OOXML-palettslotten fra 8 til 63
ARGBDen normaliserte ugjennomsiktige fargen som er lagret på den valgte palettslotten
DistanceSquaredDen kvadrerte euklidiske avstanden i OKLab-fargerommet
ExactMatchSann 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;

Se også