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
| Pole | Význam |
|---|---|
InputARGB | Normalizovaná nepriehľadná vstupná farba |
ColorIndex | Verejný index palety od 1 do 56 |
PaletteSlot | Fyzický slot palety BIFF alebo OOXML od 8 do 63 |
ARGB | Normalizovaná nepriehľadná farba uložená vo vybranom slote palety |
DistanceSquared | Kvadratická euklidovská vzdialenosť vo farebnom priestore OKLab |
ExactMatch | True, 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;