Dokumentacja HotXLS

Metoda NearestIndexedColor

Znajduje najbliższy wpis wśród fizycznych slotów palety 8..63 i zwraca zarówno jego publiczną wartość ColorIndex, jak i slot fizyczny

Metoda jest dostępna zarówno w IXLSWorkbook, jak i w TXLSXWorkbook i nie modyfikuje stanu palety ani skoroszytu

Składnia

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

Wejście

AArgb przyjmuje 24-bitową wartość $00RRGGBB lub nieprzezroczystą wartość $FFRRGGBB

Zerowy bajt alfa jest normalizowany do $FF; wartości częściowo przezroczyste są odrzucane, ponieważ wpisy indeksowanej palety skoroszytu są nieprzezroczyste

Wynik

PoleZnaczenie
InputARGBZnormalizowany nieprzezroczysty kolor wejściowy
ColorIndexPubliczny indeks palety od 1 do 56
PaletteSlotFizyczny slot palety BIFF lub OOXML od 8 do 63
ARGBZnormalizowany nieprzezroczysty kolor zapisany w wybranym slocie palety
DistanceSquaredKwadrat odległości euklidesowej w przestrzeni barw OKLab
ExactMatchTrue, gdy wybrany wpis ma te same kanały RGB co znormalizowane wejście

Funkcja zwraca false dla częściowo przezroczystego wejścia lub gdy pamięć podręczna palety jest niedostępna; przy niepowodzeniu ColorIndex jest inicjalizowany zerem, a PaletteSlot wartością -1

Kontrakt dopasowania

Każdy skoroszyt cache'uje znormalizowane ARGB i współrzędne OKLab swoich 56 fizycznych wpisów palety

Reset palety przebudowuje kompletną pamięć podręczną, a skuteczna zmiana pojedynczego slotu aktualizuje tylko ten cache'owany slot

Każde zapytanie konwertuje wejście raz i wykonuje jeden stały przebieg po 56 wpisach, bez historii zapytań i nieograniczonego wzrostu pamięci podręcznej

Przy równych odległościach wybierany jest najniższy publiczny indeks, włącznie z duplikującymi się kolorami palety, dzięki czemu wyniki pozostają deterministyczne między silnikami i uruchomieniami

Tokeny kolorów automatyczne, systemowe i nieprawidłowe nie są kandydatami; użyj ResolveIndexedColor, aby klasyfikować takie wartości

Przykład

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

Zobacz także