NearestIndexedColor-methode
Zoekt de dichtstbijzijnde invoer onder de fysieke paletslots 8..63 en geeft zowel de openbare ColorIndex-waarde als de fysieke slot terug
De methode is beschikbaar op zowel IXLSWorkbook als TXLSXWorkbook en wijzigt de palet- of werkmapstatus niet
Syntaxis
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Invoer
AArgb accepteert een 24-bits $00RRGGBB-waarde of een ondoorzichtige $FFRRGGBB-waarde
Een alfabyte van nul wordt genormaliseerd naar $FF; gedeeltelijk transparante waarden worden geweigerd omdat geïndexeerde paletinvoer van de werkmap ondoorzichtig is
Resultaat
| Veld | Betekenis |
|---|---|
InputARGB | De genormaliseerde ondoorzichtige invoerkleur |
ColorIndex | De openbare paletindex van 1 tot en met 56 |
PaletteSlot | Het fysieke BIFF- of OOXML-paletslot van 8 tot en met 63 |
ARGB | De genormaliseerde ondoorzichtige kleur die in het gekozen paletslot is opgeslagen |
DistanceSquared | De gekwadrateerde euclidische afstand in de OKLab-kleurenruimte |
ExactMatch | True wanneer de gekozen invoer dezelfde RGB-kanalen heeft als de genormaliseerde invoer |
De functie geeft false terug voor een gedeeltelijk transparante invoer of wanneer de paletcache niet beschikbaar is; bij mislukking wordt ColorIndex op nul en PaletteSlot op -1 geïnitialiseerd
Matchingscontract
Elke werkmap cachet de genormaliseerde ARGB- en OKLab-coördinaten van zijn 56 fysieke paletinvoeren
Een herstel van het palet bouwt de volledige cache opnieuw op, en een effectieve wijziging van één slot werkt alleen dat gecachte slot bij
Elke query converteert de invoer één keer en voert precies één vaste scan over 56 invoeren uit, zonder querygeschiedenis of onbegrensde cachegroei
Gelijke afstanden kiezen de laagste openbare index, ook bij dubbele paletkleuren, zodat de resultaten over engines en uitvoeringen heen deterministisch blijven
Automatische, systeem- en ongeldige kleurtokens zijn geen kandidaten; gebruik ResolveIndexedColor om die waarden te classificeren
Voorbeeld
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;