Документация на 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
ExactMatchИстина, когато избраният запис има същите 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;

Вижте също