Documentație HotXLS

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âmpSemnificație
InputARGBCuloarea de intrare normalizată și opacă
ColorIndexIndexul public al paletei, de la 1 la 56
PaletteSlotSlotul fizic al paletei BIFF sau OOXML, de la 8 la 63
ARGBCuloarea opacă normalizată stocată în slotul de paletă selectat
DistanceSquaredDistanța euclidiană pătratică în spațiul de culori OKLab
ExactMatchTrue 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;

Consultați și