Dokumentácia HotXLS

Metóda NearestIndexedColor

Nájde najbližšiu položku medzi fyzickými slotmi palety 8..63 a vráti jej verejnú hodnotu ColorIndex aj fyzický slot

Metóda je k dispozícii na IXLSWorkbook aj TXLSXWorkbook a nemení stav palety ani zošita

Syntax

function NearestIndexedColor(
  AArgb: LongWord;
  out AMatch: TXLSNearestIndexedColorMatch): Boolean;

Vstup

AArgb prijíma 24bitovú hodnotu $00RRGGBB alebo nepriehľadnú hodnotu $FFRRGGBB

Nulový bajt alfa sa normalizuje na $FF; čiastočne priehľadné hodnoty sa odmietajú, pretože indexované položky palety zošita sú nepriehľadné

Výsledok

PoleVýznam
InputARGBNormalizovaná nepriehľadná vstupná farba
ColorIndexVerejný index palety od 1 do 56
PaletteSlotFyzický slot palety BIFF alebo OOXML od 8 do 63
ARGBNormalizovaná nepriehľadná farba uložená vo vybranom slote palety
DistanceSquaredKvadratická euklidovská vzdialenosť vo farebnom priestore OKLab
ExactMatchTrue, keď vybraná položka má rovnaké kanály RGB ako normalizovaný vstup

Funkcia vráti false pre čiastočne priehľadný vstup alebo keď medzipamäť palety nie je k dispozícii; pri zlyhaní inicializuje ColorIndex na nulu a PaletteSlot na -1

Kontrakt párovania

Každý zošit kešuje normalizované ARGB a súradnice OKLab svojich 56 fyzických položiek palety

Reset palety prestaví kompletnú medzipamäť a účinná zmena jediného slotu aktualizuje len tento kešovaný slot

Každý dotaz prevedie vstup raz a vykoná jediné pevné prehľadanie 56 položiek bez histórie dotazov alebo neobmedzeného rastu medzipamäti

Rovnaké vzdialenosti vyberajú najnižší verejný index, vrátane duplicitných farieb palety, takže výsledky ostávajú deterministické naprieč enginmi a behmi

Automatické, systémové a neplatné tokeny farieb nie sú kandidátmi; na ich klasifikáciu použite ResolveIndexedColor

Príklad

if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
  PaletteIndex := Match.ColorIndex;
  if Match.ExactMatch then
    UseExactPaletteColor(Match.ARGB);
end;

Pozri tiež