Metoda NearestIndexedColor
Găsește cea mai apropiată intrare printre sloturile fizice ale paletei 8..63 și returnează atât valoarea publică ColorIndex, cât și slotul fizic
Metoda este disponibilă atât pe IXLSWorkbook, cât și pe TXLSXWorkbook și nu modifică paleta sau starea registrului de lucru
Sintaxă
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Intrare
AArgb acceptă o valoare $00RRGGBB pe 24 de biți sau o valoare opacă $FFRRGGBB
Un octet alfa zero este normalizat la $FF; valorile parțial transparente sunt respinse deoarece intrările indexate ale paletei registrului de lucru sunt opace
Rezultat
| Câmp | Semnificație |
|---|---|
InputARGB | Culoarea de intrare normalizată și opacă |
ColorIndex | Indexul public al paletei, de la 1 la 56 |
PaletteSlot | Slotul fizic al paletei BIFF sau OOXML, de la 8 la 63 |
ARGB | Culoarea opacă normalizată stocată în slotul de paletă selectat |
DistanceSquared | Distanța euclidiană pătratică în spațiul de culori OKLab |
ExactMatch | True când intrarea selectată are aceleași canale RGB ca intrarea normalizată |
Funcția returnează false pentru o intrare parțial transparentă sau când cache-ul paletei nu este disponibil; la eșec, ColorIndex este inițializat la zero și PaletteSlot la -1
Contractul de potrivire
Fiecare registru de lucru ține în cache ARGB-ul normalizat și coordonatele OKLab ale celor 56 de intrări fizice ale paletei sale
Resetarea paletei reconstruiește complet cache-ul, iar o schimbare efectivă a unui singur slot actualizează doar acel slot din cache
Fiecare interogare convertește intrarea o singură dată și efectuează o singură scanare fixă de 56 de intrări, fără istoric de interogări sau creștere nelimitată a cache-ului
Distanțele egale selectează cel mai mic index public, inclusiv în cazul culorilor duplicate din paletă, astfel încât rezultatele rămân deterministe între motoare și rulări
Token-urile de culoare automată, de sistem și invalide nu sunt candidate; utilizați ResolveIndexedColor pentru a clasifica acele valori
Exemplu
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;