Метод NearestIndexedColor
Знаходить найближчий запис серед фізичних слотів палітри 8..63 і повертає як його публічне значення ColorIndex, так і фізичний слот
Метод доступний як в IXLSWorkbook, так і в TXLSXWorkbook і не змінює стан палітри чи книги
Синтаксис
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Вхідні дані
AArgb приймає 24-розрядне значення $00RRGGBB або непрозоре значення $FFRRGGBB
Нульовий байт альфи нормалізується до $FF; частково прозорі значення відхиляються, оскільки записи індексованої палітри книги непрозорі
Результат
| Поле | Значення |
|---|---|
InputARGB | Нормалізований непрозорий вхідний колір |
ColorIndex | Публічний індекс палітри від 1 до 56 |
PaletteSlot | Фізичний слот палітри BIFF чи OOXML від 8 до 63 |
ARGB | Нормалізований непрозорий колір, збережений у обраному слоті палітри |
DistanceSquared | Квадрат євклідової відстані у колірному просторі OKLab |
ExactMatch | True, коли обраний запис має ті самі канали RGB, що й нормалізований вхід |
Функція повертає false для частково прозорого входу або коли кеш палітри недоступний; при збої ColorIndex ініціалізується нулем, а PaletteSlot — значенням -1
Контракт зіставлення
Кожна книга кешує нормалізовані ARGB і координати OKLab своїх 56 фізичних записів палітри
Скидання палітри перебудовує повний кеш, а дієва зміна одного слота оновлює лише цей кешований слот
Кожен запит перетворює вхід один раз і виконує один фіксований прохід по 56 записах без історії запитів та необмеженого зростання кешу
За рівних відстаней обирається найменший публічний індекс, зокрема для дублюваних кольорів палітри, тож результати залишаються детермінованими між рушіями та запусками
Автоматичні, системні та недійсні колірні токени не є кандидатами; використовуйте ResolveIndexedColor для класифікації таких значень
Приклад
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;