Documentación HotXLS

Método NearestIndexedColor

Busca la entrada más cercana entre las ranuras físicas de la paleta 8..63 y devuelve tanto su valor público ColorIndex como la ranura física

El método está disponible tanto en IXLSWorkbook como en TXLSXWorkbook y no modifica la paleta ni el estado del libro

Sintaxis

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

Entrada

AArgb acepta un valor de 24 bits $00RRGGBB o un valor opaco $FFRRGGBB

Un byte alfa cero se normaliza a $FF; los valores parcialmente transparentes se rechazan porque las entradas de la paleta indexada del libro son opacas

Resultado

CampoSignificado
InputARGBEl color de entrada opaco normalizado
ColorIndexEl índice público de la paleta, del 1 al 56
PaletteSlotLa ranura física de paleta BIFF u OOXML, del 8 al 63
ARGBEl color opaco normalizado almacenado en la ranura de paleta seleccionada
DistanceSquaredLa distancia euclidiana al cuadrado en el espacio de color OKLab
ExactMatchTrue cuando la entrada seleccionada tiene los mismos canales RGB que el valor de entrada normalizado

La función devuelve false para una entrada parcialmente transparente o cuando la caché de la paleta no está disponible; en caso de fallo, inicializa ColorIndex a cero y PaletteSlot a -1

Contrato de coincidencia

Cada libro almacena en caché el ARGB normalizado y las coordenadas OKLab de sus 56 entradas físicas de paleta

Un restablecimiento de la paleta recompila la caché completa y un cambio efectivo de una sola ranura actualiza solo esa ranura en caché

Cada consulta convierte la entrada una vez y realiza un examen fijo de las 56 entradas, sin historial de consultas ni crecimiento ilimitado de la caché

Las distancias iguales seleccionan el índice público más bajo, incluidos los colores duplicados de la paleta, de modo que los resultados permanecen deterministas en todos los motores y ejecuciones

Los tokens de color automáticos, del sistema y no válidos no son candidatos; use ResolveIndexedColor para clasificar esos valores

Ejemplo

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

Véase también