Documentação do HotXLS

Método NearestIndexedColor

Localiza a entrada mais próxima entre as ranhuras físicas da paleta 8..63 e devolve tanto o valor público de ColorIndex como a ranhura física

O método está disponível tanto em IXLSWorkbook como em TXLSXWorkbook e não modifica a paleta nem o estado do livro de trabalho

Sintaxe

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

Entrada

AArgb aceita um valor $00RRGGBB de 24 bits ou um valor $FFRRGGBB opaco

Um byte alfa zero é normalizado para $FF; os valores parcialmente transparentes são rejeitados porque as entradas indexadas da paleta do livro de trabalho são opacas

Resultado

CampoSignificado
InputARGBA cor de entrada opaca normalizada
ColorIndexO índice público da paleta de 1 a 56
PaletteSlotA ranhura física da paleta BIFF ou OOXML de 8 a 63
ARGBA cor opaca normalizada armazenada na ranhura da paleta selecionada
DistanceSquaredA distância euclidiana ao quadrado no espaço de cores OKLab
ExactMatchTrue quando a entrada selecionada tem os mesmos canais RGB que a entrada normalizada

A função devolve false para uma entrada parcialmente transparente ou quando a cache da paleta não está disponível; em caso de falha, ColorIndex é inicializado com zero e PaletteSlot com -1

Contrato de correspondência

Cada livro de trabalho coloca em cache o ARGB normalizado e as coordenadas OKLab das suas 56 entradas físicas da paleta

Uma reposição da paleta reconstrói a cache completa e uma alteração efetiva de uma única ranhura atualiza apenas essa ranhura em cache

Cada consulta converte a entrada uma vez e efetua uma única análise fixa de 56 entradas, sem histórico de consultas nem crescimento ilimitado da cache

Distâncias iguais selecionam o menor índice público, incluindo cores duplicadas da paleta, pelo que os resultados permanecem determinísticos entre motores e execuções

Os tokens de cores automáticas, de sistema e inválidas não são candidatos; utilize ResolveIndexedColor para classificar esses valores

Exemplo

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

Veja também