NearestIndexedColor metodi
Löytää lähimmän merkinnän fyysisten paletin paikkojen 8..63 joukosta ja palauttaa sekä sen julkisen ColorIndex-arvon että fyysisen paikan
Metodi on käytettävissä sekä IXLSWorkbook- että TXLSXWorkbook-luokissa, eikä se muuta palettia tai työkirjan tilaa
Syntaksi
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Syöte
AArgb hyväksyy 24-bittisen $00RRGGBB-arvon tai läpinäkymättömän $FFRRGGBB-arvon
Nolla-alfatavu normalisoidaan arvoksi $FF; osittain läpikuultavat arvot hylätään, koska työkirjan indeksoidut palettimerkinnät ovat läpinäkymättömiä
Tulos
| Kenttä | Merkitys |
|---|---|
InputARGB | Normalisoitu läpinäkymätön syöteväri |
ColorIndex | Julkinen palettiaindeksi väliltä 1–56 |
PaletteSlot | Fyysinen BIFF- tai OOXML-palettipaikka väliltä 8–63 |
ARGB | Normalisoitu läpinäkymätön väri, joka on tallennettu valittuun palettipaikkaan |
DistanceSquared | Neliöity euklidinen etäisyys OKLab-väriavaruudessa |
ExactMatch | Tosi, kun valitulla merkinnällä on samat RGB-kanavat kuin normalisoidulla syötteellä |
Funktio palauttaa arvon false osittain läpikuultavalle syötteelle tai kun palettivälimuisti ei ole käytettävissä; virhe alustaa ColorIndex-arvon nollaksi ja PaletteSlot-arvon arvoon -1
Vertailusopimus
Jokainen työkirja tallentaa välimuistiinsa 56:n fyysisen palettimerkintänsä normalisoidut ARGB- ja OKLab-koordinaatit
Paletin palautus rakentaa koko välimuistin uudelleen, ja yhden paikan toteutunut muutos päivittää vain kyseisen välimuistissa olevan paikan
Jokainen kysely muuntaa syötteen kerran ja suorittaa yhden kiinteän 56 merkinnän läpikäynnin ilman kyselyhistoriaa tai rajatonta välimuistin kasvua
Yhtä suuret etäisyydet valitsevat alimman julkisen indeksin, myös palettien kaksoiskappaleille, joten tulokset pysyvät deterministisinä moottoreiden ja suoritusten välillä
Automaattiset, järjestelmä- ja kelvottomat väri-tokenit eivät ole ehdokkaita; käytä ResolveIndexedColor-metodia näiden arvojen luokitteluun
Esimerkki
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;