Metodo NearestIndexedColor
Trova la voce più vicina tra gli slot fisici 8..63 della tavolozza e restituisce sia il suo valore pubblico ColorIndex sia lo slot fisico
Il metodo è disponibile sia su IXLSWorkbook sia su TXLSXWorkbook e non modifica la tavolozza né lo stato del workbook
Sintassi
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Input
AArgb accetta un valore a 24 bit $00RRGGBB o un valore opaco $FFRRGGBB
Un byte alfa pari a zero viene normalizzato a $FF; i valori parzialmente trasparenti vengono rifiutati perché le voci indicizzate della tavolozza del workbook sono opache
Risultato
| Campo | Significato |
|---|---|
InputARGB | Il colore di input normalizzato opaco |
ColorIndex | L'indice pubblico della tavolozza da 1 a 56 |
PaletteSlot | Lo slot fisico della tavolozza BIFF o OOXML da 8 a 63 |
ARGB | Il colore opaco normalizzato memorizzato nello slot selezionato della tavolozza |
DistanceSquared | La distanza euclidea quadratica nello spazio colore OKLab |
ExactMatch | True quando la voce selezionata ha gli stessi canali RGB dell'input normalizzato |
La funzione restituisce false per un input parzialmente trasparente o quando la cache della tavolozza non è disponibile; in caso di fallimento ColorIndex viene inizializzato a zero e PaletteSlot a -1
Contratto di corrispondenza
Ogni workbook mette in cache le coordinate ARGB normalizzate e OKLab delle sue 56 voci fisiche della tavolozza
Un ripristino della tavolozza ricostruisce l'intera cache e una modifica effettiva di un singolo slot aggiorna solo quello slot in cache
Ogni interrogazione converte l'input una sola volta ed esegue una scansione fissa delle 56 voci, senza cronologia delle interrogazioni né crescita illimitata della cache
A pari distanza viene selezionato l'indice pubblico più basso, comprese le tavolozze con colori duplicati, così i risultati restano deterministici tra motori ed esecuzioni
I token di colore automatici, di sistema e non validi non sono candidati; usare ResolveIndexedColor per classificare quei valori
Esempio
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;