HotXLS-Dokumentation

NearestIndexedColor-Methode

Findet den nächstliegenden Eintrag unter den physischen Palettenslots 8..63 und gibt sowohl seinen öffentlichen ColorIndex-Wert als auch den physischen Slot zurück

Die Methode ist sowohl für IXLSWorkbook als auch für TXLSXWorkbook verfügbar und ändert weder Palette noch Arbeitsmappenzustand

Syntax

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

Eingabe

AArgb akzeptiert einen 24-Bit-$00RRGGBB-Wert oder einen opaken $FFRRGGBB-Wert

Ein Alpha-Byte von null wird auf $FF normalisiert; teilweise transparente Werte werden abgelehnt, da indizierte Arbeitsmappen-Paletteneinträge opak sind

Ergebnis

FeldBedeutung
InputARGBDie normalisierte opake Eingabefarbe
ColorIndexDer öffentliche Palettenindex von 1 bis 56
PaletteSlotDer physische BIFF- oder OOXML-Palettenslot von 8 bis 63
ARGBDie normalisierte opake Farbe, die am gewählten Palettenslot gespeichert ist
DistanceSquaredDie quadrierte euklidische Distanz im OKLab-Farbraum
ExactMatchTrue, wenn der gewählte Eintrag dieselben RGB-Kanäle wie die normalisierte Eingabe hat

Die Funktion gibt false für eine teilweise transparente Eingabe oder wenn der Palettencache nicht verfügbar ist zurück; bei einem Fehlschlag wird ColorIndex auf null und PaletteSlot auf -1 initialisiert

Abgleich-Kontrakt

Jede Arbeitsmappe zwischenspeichert die normalisierten ARGB- und OKLab-Koordinaten ihrer 56 physischen Paletteneinträge

Eine Palettenrücksetzung baut den vollständigen Cache neu auf, und eine wirksame Änderung eines einzelnen Slots aktualisiert nur diesen zwischengespeicherten Slot

Jede Abfrage konvertiert die Eingabe einmal und führt genau einen festen 56-Eintrag-Scan ohne Abfragehistorie oder unbegrenztes Cache-Wachstum durch

Gleiche Distanzen wählen den niedrigsten öffentlichen Index, einschließlich doppelter Palettenfarben, sodass die Ergebnisse über Engines und Läufe hinweg deterministisch bleiben

Automatische, System- und ungültige Farbtokens sind keine Kandidaten; verwenden Sie ResolveIndexedColor, um diese Werte zu klassifizieren

Beispiel

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

Siehe auch