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
| Campo | Significado |
|---|---|
InputARGB | A cor de entrada opaca normalizada |
ColorIndex | O índice público da paleta de 1 a 56 |
PaletteSlot | O slot físico da paleta BIFF ou OOXML de 8 a 63 |
ARGB | A cor opaca normalizada armazenada no slot da paleta selecionado |
DistanceSquared | A distância euclidiana ao quadrado no espaço de cores OKLab |
ExactMatch | True 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;