Docs HotXLS

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

ChampSignification
InputARGBLa couleur d'entrée normalisée opaque
ColorIndexL'index public de palette de 1 à 56
PaletteSlotL'emplacement physique de palette BIFF ou OOXML de 8 à 63
ARGBLa couleur opaque normalisée stockée à l'emplacement de palette sélectionné
DistanceSquaredLa distance euclidienne quadratique dans l'espace colorimétrique OKLab
ExactMatchTrue 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;

Voir aussi