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
| Pole | Znaczenie |
|---|---|
InputARGB | Znormalizowany nieprzezroczysty kolor wejściowy |
ColorIndex | Publiczny indeks palety od 1 do 56 |
PaletteSlot | Fizyczny slot palety BIFF lub OOXML od 8 do 63 |
ARGB | Znormalizowany nieprzezroczysty kolor zapisany w wybranym slocie palety |
DistanceSquared | Kwadrat odległości euklidesowej w przestrzeni barw OKLab |
ExactMatch | True, 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;