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
- Hodnoty
/Matrixobjektu Form XObject se před spuštěním obsahu skupiny skládají s aktuální transformační maticí - Izolované skupiny používají samostatnou rovinu alfa, takže černý obsah zůstává odlišitelný od průhledných pixelů
- Skupiny knockout nahrazují předchozí příspěvek skupiny v překrývajících se vykreslených oblastech
- Obsah skupiny začíná normálním režimem prolnutí: režim prolnutí, konstantní alfa i měkká maska platné v okamžiku
Dose na skupinu použijí jako na celek - Skupina vykreslená jiným režimem prolnutí mísí vlastní barvu a alfu s pozadím; neizolovaná skupina, jejíž vlastní grafické stavy se prolnou normálně, se vykreslí na černo a na bílo, aby se obnovila její alfa
- Skupiny se dělí na omezené dlaždice po 768 pixelech při zachování absolutních souřadnic zařízení pro GDI, fázi polotónu, vnořené skupiny, měkké masky a kompozici
- Bajty formuláře se před vykonáním dlaždic jednou dekódují a tokenizují a dočasné masky lokální pro dlaždici se před další dlaždicí uvolní
- Vnořené skupiny jsou podporovány s omezenou rekurzí a po každém vyvolání Form se plně obnoví grafický stav
Měkké masky
- Masky
/S /Alphaa/S /Luminosityse vyhodnocují ze skupiny masky - Skupina masky se vykresluje s normálním prolnutím, ať nese režim prolnutí jakýkoli grafický stav, který masku nastavuje
- Masky jasu určují
/CSskupiny průhlednosti a váží vyřešenou barvu aproximací PDF DeviceGray, jak dělají běžné prohlížeče PDF; aby se místo toho pro prostory založené na CIE použil kolorimetrický CIE Y, nastavteRenderColorimetricLuminosityMasks /BCse ověřuje vůči přesnému počtu složek prolínacího prostoru a mimo vykreslený obsah masky poskytuje převedený jas- Vykreslení Separation a DeviceN se převádí přes náhradní prostor Lab nebo ICCBased, aby se přímé barvy nikdy nedostaly do měkké masky
- Přenosové funkce
/TRpodporují vzorkované, exponenciální, stitching a kalkulační funkce PostScript pomocí sdíleného vyhodnocovače funkcí /SMask /Noneaktivní masku vymaže aqneboQstav masky běžně zachová- Kompilované masky se znovu použijí jen tehdy, když se shodují zdrojový slovník, aktuální transformační matice i rendering intent
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;