HotXLS-documentatie

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

VeldBetekenis
InputARGBDe genormaliseerde ondoorzichtige invoerkleur
ColorIndexDe openbare paletindex van 1 tot en met 56
PaletteSlotHet fysieke BIFF- of OOXML-paletslot van 8 tot en met 63
ARGBDe genormaliseerde ondoorzichtige kleur die in het gekozen paletslot is opgeslagen
DistanceSquaredDe gekwadrateerde euclidische afstand in de OKLab-kleurenruimte
ExactMatchTrue 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;

Zie ook