HotXLS-dokumentation

Metoden NearestIndexedColor

Hittar den närmaste posten bland de fysiska palettplatserna 8..63 och returnerar både dess publika ColorIndex-värde och fysiska plats

Metoden är tillgänglig i både IXLSWorkbook och TXLSXWorkbook och ändrar inte palett- eller arbetsbokstillstånd

Syntax

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

Indata

AArgb accepterar ett 24-bitars $00RRGGBB-värde eller ett opakt $FFRRGGBB-värde

En alfabyte med noll normaliseras till $FF; delvis transparenta värden avvisas eftersom indexerade palettposter i arbetsboken är opaka

Resultat

FältBetydelse
InputARGBDen normaliserade opaka indatafärgen
ColorIndexDet publika palettindexet från 1 till 56
PaletteSlotDen fysiska BIFF- eller OOXML-palettplatsen från 8 till 63
ARGBDen normaliserade opaka färg som är lagrad på den valda palettplatsen
DistanceSquaredDet kvadrerade euklidiska avståndet i OKLab-färgrymden
ExactMatchSant när den valda posten har samma RGB-kanaler som det normaliserade indatan

Funktionen returnerar false för delvis transparent indata eller när palett-cachen inte är tillgänglig; vid fel initieras ColorIndex till noll och PaletteSlot till -1

Matchningskontrakt

Varje arbetsbok cachar de normaliserade ARGB- och OKLab-koordinaterna för sina 56 fysiska palettposter

En palettåterställning bygger upp hela cachen igen, och en effektiv ändring av en enda plats uppdaterar endast den cachade platsen

Varje fråga konverterar indatan en gång och utför en fast genomsökning av 56 poster, utan frågehistorik eller obegränsad cachetillväxt

Lika avstånd väljer det lägsta publika indexet, även för dubbletter av palettfärger, så att resultaten förblir deterministiska mellan motorer och körningar

Automatiska, system- och ogiltiga färgtoken är inte kandidater; använd ResolveIndexedColor för att klassificera dessa värden

Exempel

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

Se även