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
| Feld | Bedeutung |
|---|---|
InputARGB | Die normalisierte opake Eingabefarbe |
ColorIndex | Der öffentliche Palettenindex von 1 bis 56 |
PaletteSlot | Der physische BIFF- oder OOXML-Palettenslot von 8 bis 63 |
ARGB | Die normalisierte opake Farbe, die am gewählten Palettenslot gespeichert ist |
DistanceSquared | Die quadrierte euklidische Distanz im OKLab-Farbraum |
ExactMatch | True, 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;