Méthode NearestIndexedColor
Recherche l'entrée la plus proche parmi les emplacements physiques 8..63 de la palette et renvoie à la fois sa valeur publique ColorIndex et son emplacement physique
La méthode est disponible sur IXLSWorkbook et TXLSXWorkbook et ne modifie ni la palette ni l'état du classeur
Syntaxe
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Entrée
AArgb accepte une valeur 24 bits $00RRGGBB ou une valeur opaque $FFRRGGBB
Un octet alpha nul est normalisé à $FF ; les valeurs partiellement transparentes sont rejetées car les entrées de palette indexées du classeur sont opaques
Résultat
| Champ | Signification |
|---|---|
InputARGB | La couleur d'entrée normalisée opaque |
ColorIndex | L'index public de palette de 1 à 56 |
PaletteSlot | L'emplacement physique de palette BIFF ou OOXML de 8 à 63 |
ARGB | La couleur opaque normalisée stockée à l'emplacement de palette sélectionné |
DistanceSquared | La distance euclidienne quadratique dans l'espace colorimétrique OKLab |
ExactMatch | True lorsque l'entrée sélectionnée a les mêmes canaux RGB que l'entrée normalisée |
La fonction renvoie false pour une entrée partiellement transparente ou lorsque le cache de palette est indisponible ; en cas d'échec, ColorIndex est initialisé à zéro et PaletteSlot à -1
Contrat de correspondance
Chaque classeur met en cache les coordonnées ARGB normalisées et OKLab de ses 56 entrées physiques de palette
Une réinitialisation de palette reconstruit le cache complet et une modification effective d'un seul emplacement ne met à jour que cet emplacement en cache
Chaque requête convertit l'entrée une seule fois et effectue un balayage fixe des 56 entrées, sans historique de requêtes ni croissance illimitée du cache
À distances égales, l'index public le plus bas est sélectionné, y compris pour les couleurs de palette en double, de sorte que les résultats restent déterministes d'un moteur et d'une exécution à l'autre
Les jetons de couleurs automatiques, système et invalides ne sont pas des candidats ; utilisez ResolveIndexedColor pour classer ces valeurs
Exemple
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;