Documentação do HotXLS

Método NearestIndexedColor

Localiza a entrada mais próxima entre os slots físicos da paleta 8..63 e retorna tanto o valor público de ColorIndex quanto o slot físico

O método está disponível tanto em IXLSWorkbook quanto em TXLSXWorkbook e não modifica a paleta nem o estado da pasta 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; valores parcialmente transparentes são rejeitados porque as entradas indexadas da paleta da pasta de trabalho são opacas

Resultado

CampoSignificado
InputARGBA cor de entrada opaca normalizada
ColorIndexO índice público da paleta de 1 a 56
PaletteSlotO slot físico da paleta BIFF ou OOXML de 8 a 63
ARGBA cor opaca normalizada armazenada no slot da paleta selecionado
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 retorna false para uma entrada parcialmente transparente ou quando o 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 pasta de trabalho armazena em cache o ARGB normalizado e as coordenadas OKLab de suas 56 entradas físicas da paleta

Uma redefinição da paleta reconstrói o cache completo e uma alteração efetiva de um único slot atualiza somente esse slot em cache

Cada consulta converte a entrada uma vez e executa uma única varredura fixa de 56 entradas, sem histórico de consultas ou crescimento ilimitado do cache

Distâncias iguais selecionam o menor índice público, incluindo cores duplicadas da paleta, de modo que os resultados permaneçam determinísticos entre mecanismos e execuções

Tokens de cores automáticas, do sistema e inválidas não são candidatos; use 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