Документація HotXLS

Метод 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
ExactMatchTrue, коли обраний запис має ті самі канали 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;

Див. також