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ält | Betydelse |
|---|---|
InputARGB | Den normaliserade opaka indatafärgen |
ColorIndex | Det publika palettindexet från 1 till 56 |
PaletteSlot | Den fysiska BIFF- eller OOXML-palettplatsen från 8 till 63 |
ARGB | Den normaliserade opaka färg som är lagrad på den valda palettplatsen |
DistanceSquared | Det kvadrerade euklidiska avståndet i OKLab-färgrymden |
ExactMatch | Sant 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;