Pokročilá sémantika vykreslování

Vykreslování načtené stránky zachovává stav vnořených Form XObject a uplatňuje skupiny průhlednosti, měkké masky, procedury glyfů Type 3 a dekódování viditelných oblastí obrázků s ohledem na rozlišení

Čárkované tahy cest

Nativní vykreslování cest zachovává kompletní pole čárkovaných vzorů i jejich fázi, včetně polí liché délky, zlomkových délek a nulově dlouhých vykreslených čár s kulatými nebo čtvercovými koncovkami; vzor čárkování se restartuje na každé dílčí cestě

Tahy plnou barvou i ořezové cesty tahů se vzorem přechodu sdílejí jednu ohraničenou cestu geometrie čárkování, zachovávají spoje uvnitř souvislých vykreslených úseků a spojují vykreslené úseky napříč počátečním bodem uzavřené kontury

Délky čár si drží průměrné měřítko aktuální transformace vykreslovače, zatímco dělení křivek používá adaptivní zploštění v prostoru zařízení; vyplňování a čekající ořez dál používají původní nerozdělenou cestu

Skupiny průhlednosti

Měkké masky

Funkce přenosu a vzorkování

/TR2 má přednost před /TR, jedna funkce se aplikuje na každý výstupní kanál RGB a pole čtyř funkcí používá první tři položky nezávisle při zachování položek /Identity a /Default

Aplikace nového stavu přenosu vymění všechny kanály atomicky, takže identity položky nemohou zdědit lookup hodnoty z dřívějšího grafického stavu

Vzorkované funkce Type 0 podporují jednu až čtyři vstupní a výstupní dimenze, hodnoty /BitsPerSample 1, 2, 4, 8, 12, 16, 24 a 32, mapování /Encode v přímém i obráceném směru, nezávislé rozsahy /Decode, multilineární interpolaci, vícerozměrnou kubickou interpolaci a přirozené kubické splajny pro jednorozměrná data /Order 3

Dekódované vzorkové bajty, validované dimenze, mapování i kubické derivace sdílejí LRU o osmi položkách se stropem 64 MiB na vykreslovací vlákno, zatímco příliš velké nebo poškozené funkce selžou, aniž by částečně vyměnily aktivní transfer lookup tabulku

Polotónové rastry

Pole prahů Type 6, Type 10 a Type 16 se provádějí přímo s přesně dekódovanými délkami, 16bitovými prahy big-endian, porovnáním aditivních složek a kompaktními periodickými pruhy, které se vyhnou rozbalování šikmých nebo dvouobdélníkových rasterů

Slovníky Type 5 vybírají nezávislé rastry /Red, /Green a /Blue se zálohami /Gray a povinným /Default, přičemž každý vybraný raster může přebít globální přenosovou funkci

Validované prahové bajty i jejich normalizovaná geometrie sdílejí LRU o 64 položkách s limbem 64 MiB na vykreslovač; poškozené rozměry, přebytečné alokace, vnořené slovníky Type 5 i nesouhlas délky payloadu ponechají kompletní aktivní obrazovkový stav v režimu spojitých tónů

Glyfy Type 3

CharProcs Type 3 procházejí úplným enginem operátorů obsahu s aktuálním rozsahem prostředků slovníku fontu, podporou Form, ořezem, obrázky, vzory a omezenou rekurzí

d0 a d1 poskytují metriky glyfu, přičemž procedura d1 zachová barvu vybranou volajícím, jak vyžaduje PDF imaging model

Opakované CharProcs znovu používají dekódované a tokenizované display listy, když se shodují font, glyf, lineární device matice i barevný stav; translace zůstává dynamická, takže opakované znaky na různých pozicích sdílejí jednu položku

LRU vykreslovače uchovává nejvýše 256 položek a 131 072 tokenů, obchází jakýkoliv CharProc nad 16 384 tokeny a své chování hlásí přes GetLastType3GlyphCacheStats

Oříznuté a zmenšené oblasti obrázků

Osy zarovnané obrázky XObject vyžadují pouze hranice viditelného zdroje a předají cestě dekódování viditelnou velikost v pixelech zařízení

Obrázek s měkkou maskou se dekóduje celý ve velikosti, ve které se vykresluje, a jeho maska ve stejné velikosti, takže maska zůstává s obrázkem zarovnaná, zatímco ořez omezuje, co se vykresluje; masky JPEG používají DCT dekodér zmenšeného rozlišení

Při vykreslování se dekódovaná oblast nejméně dvakrát větší než vykreslovaná velikost v obou směrech před vykreslením nebo uložením do mezipaměti zmenší průměrováním po ploše přesně na vykreslovanou velikost; velký obrázek vykreslený malý se pak vejde do dekódovací mezipaměti, takže ho skupina vykreslená dvakrát nebo opakovaná stránka znovu použije a jeho měkká maska se aplikuje po pixelech v té velikosti. Masky stencil obrázků si zachovají plné rozlišení a veřejné metody dekódování oblastí vracejí zdokumentované velikosti

JPEG 2000 kombinuje nativní API oblastí dekodéru s úrovní rozlišení o mocnině dvou vybranou podle cílových rozměrů před rekonstrukcí waveletů a rozšířením rastru

Tile-addressable codestreamy JPEG 2000 umí dekódovat jednu validovanou dlaždici přímo přes THPDFJpeg2000Decoder.LoadTileFromByteArray, přičemž metadata dlaždicové mřížky i limity výstupních bajtů zpřístupňuje dekodér

Když nativní oblast protíná více nezávislých dlaždic, LoadRegionFromByteArrayParallel přidělí každému workerovi vlastní stav OpenJPEG a složí dokončené rastry v deterministickém pořadí po řádcích; cancellation, limity výstupu a efektivní budget špičné paměti mohou zastavit plánování nebo zvolit sekvenční fallback

Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
  Canvas.Draw(0, 0, Region);
finally
  Region.Free;
end;

Související API