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
| Campo | Significado |
|---|---|
InputARGB | El color de entrada opaco normalizado |
ColorIndex | El índice público de la paleta, del 1 al 56 |
PaletteSlot | La ranura física de paleta BIFF u OOXML, del 8 al 63 |
ARGB | El color opaco normalizado almacenado en la ranura de paleta seleccionada |
DistanceSquared | La distancia euclidiana al cuadrado en el espacio de color OKLab |
ExactMatch | True 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;