Avanceret gengivelsessemantik
Gengivelse af indlæste sider bevarer indlejret Form XObject-tilstand, mens den anvender gennemsigtighedsgrupper, bløde masker, Type 3-glyfprocedurer og opløsningsbevidst afkodning af synlige billedområder
Stiplede streger
Den oprindelige kurvegengivelse bevarer komplette dash-arrays og deres fase, inklusive arrays med ulige længde, brøkdellængder og malede dash-segmenter med længden nul med runde eller kvadratiske ender; dash-mønsteret starter forfra ved hver delkurve
Ensfarvede streger og stregklip med gradientmønstre deler én afgrænset dash-geometrivej, bevarer hjørnesamlinger inden for sammenhængende malede sektioner og forbinder malede sektioner hen over en lukket konturs startpunkt
Dash-længder bevarer renderens gennemsnitlige skalering af den aktuelle transformation, mens kurveopdeling bruger adaptiv udfladning i enhedsrum; udfyldning og ventende klipning fortsætter med den oprindelige uopdelte kurve
Gennemsigtighedsgrupper
- Form XObject-
/Matrix-værdier sammensættes med den aktuelle transformationsmatrix, før gruppeindhold køres - Isolerede grupper anvender et separat alfaplan, så sort indhold kan skelnes fra gennemsigtige pixels
- Knockout-grupper erstatter det tidligere gruppetilskud i overlappende malede områder
- Gruppeindhold starter fra Normal blend-tilstanden: blend-tilstanden, konstant alfa og soft masken, der gælder ved
Do, anvendes på gruppen som helhed - En gruppe, der males med en anden blend-tilstand, blander sin egen farve og alfa med baggrunden; en ikke-isoleret gruppe, hvis egne grafiktilstande blander normalt, tegnes på sort og på hvidt for at gendanne dens alfa
- Grupper opdeles i afgrænsede fliser på 768 pixel, mens GDI-maling, halvtonefase, indlejrede grupper, bløde masker og komposition bevarer absolutte enhedskoordinater
- Form-bytes afkodes og tokeniseres én gang før fliseudførelse, og midlertidige fliselokale masker frigives før næste flise
- Indlejrede grupper understøttes med afgrænset rekursion og fuld gendannelse af grafiktilstand efter hver Form-kald
Bløde masker
/S /Alpha- og/S /Luminosity-masker evalueres fra maskegruppen- Maskegruppen tegnes med Normal-blending, uanset hvilken blend-tilstand den grafiktilstand, der sætter masken, bærer
- Luminansmasker løser gennemsigtighedsgruppens
/CSog vægter den løste farve med PDF DeviceGray-tilnærmelsen, som almindelige fremvisere gør; sætRenderColorimetricLuminosityMasksfor i stedet at bruge kolorimetrisk CIE Y for CIE-baserede rum /BCvalideres mod det præcise komponentantal i blandingsrummet og leverer den konverterede luminans uden for malet maskeindhold- Separation- og DeviceN-maling konverteres gennem sit alternative Lab- eller ICCBased-rum, så spotkomponenter aldrig lækker ind i en blød maske
/TR-overførselsfunktioner understøtter samplede, eksponentielle, stitching- og PostScript-beregnerfunktioner gennem den delte funktionsevaluator/SMask /Nonerydder den aktive maske, ogqellerQbevarer normalt masketilstanden- Kompilerede masker genbruges kun, når kildedictionary, aktuel transformationsmatrix og rendering intent alle stemmer overens
Overførsels- og samplede funktioner
/TR2 har forrang over /TR, en enkelt funktion gælder for hver RGB-udgangskanal, og et array med fire funktioner anvender sine første tre poster uafhængigt, mens /Identity- og /Default-poster bevares
Anvendelse af en ny overførselstilstand erstatter alle kanaler atomisk, så identitetsposter ikke kan arve opslagsværdier fra en tidligere grafiktilstand
Type 0-samplede funktioner understøtter én til fire input- og outputdimensioner, /BitsPerSample-værdierne 1, 2, 4, 8, 12, 16, 24 og 32, omvendte eller fremadrettede /Encode-afbildninger, uafhængige /Decode-områder, multilineær interpolation, multidimensional kubisk interpolation og naturlige kubiske splines for endimensionelle /Order 3-data
Afkodede samplebytes, validerede dimensioner, afbildninger og kubiske afledte deler en LRU med otte poster og højst 64 MiB pr. gengivelsestråd, mens for store eller ugyldige funktioner fejler uden delvist at erstatte den aktive overførselsopslagstabel
Halvtoneskærme
Type 6-, Type 10- og Type 16-tærskelarrays udføres direkte med nøjagtige afkodede længder, big-endian 16-bit-tærskler, additiv komponent-sammenligning og kompakte periodiske strimler, der undgår at udvide vinklede eller to-rektangels skærme
Type 5-dictionaries vælger uafhængige /Red-, /Green- og /Blue-skærme med /Gray- og påkrævede /Default-fallbacks, mens hver valgt skærm kan tilsidesætte den globale overførselsfunktion
Validerede tærskelbytes og deres normaliserede geometri deler en LRU med 64 poster og højst 64 MiB pr. renderer, og ugyldige dimensioner, for store allokeringer, indlejrede Type 5-dictionaries eller uoverensstemmelser i nyttelastlængde efterlader hele den aktive skærmtilstand i kontinuertonetilstand
Type 3-glyffer
Type 3 CharProcs kører gennem den komplette indholdsoperator-motor med skriftdictionaryets aktuelle ressourceområde, Form-understøttelse, klipning, billeder, mønstre og afgrænset rekursion
d0 og d1 leverer glyfmålinger, mens en d1-procedure bevarer den farve, som kalderen valgte, som krævet af PDF-billedmodellen
Gentagne CharProcs genbruger afkodede og tokeniserede displaylister, når skrifttype, glyf, lineær enhedsmatrix og farvetilstand matcher, og oversættelsen forbliver dynamisk, så gentagne tegn på forskellige placeringer deler én post
LRU'en pr. renderer bevarer højst 256 poster og 131.072 tokens, omgår enhver CharProc over 16.384 tokens og rapporterer sin adfærd gennem GetLastType3GlyphCacheStats
Klipte og nedskalerede billedområder
Aksejusterede billed-XObjects anmoder kun om synlige kildegrænser og sender størrelsen i synlige enhedspixels til afkodningsstien
Et billede med en blød maske afkodes som helhed i den størrelse, det tegnes i, og dets maske i samme størrelse, så masken forbliver justeret med billedet, mens klipning begrænser, hvad der males; JPEG-masker bruger den reducerede DCT-afkoder
Ved gengivelse skrumper et afkodet område, der er mindst dobbelt så stort som tegnestørrelsen i begge retninger, til præcis tegnestørrelsen ved gennemsnitsdannelse af arealet, før det tegnes eller caches; et stort billede, der tegnes småt, kommer derfor med i decode-cachen, så en gruppe, der tegnes to gange, eller en gentagen side genbruger det, og dets bløde maske anvendes pixel for pixel i den størrelse. Stencil image-masker bevarer deres fulde opløsning, og de offentlige områdedekodningsmetoder returnerer deres dokumenterede størrelser
JPEG 2000 kombinerer dekoderens oprindelige område-API med et opløsningsniveau som potens af to, der vælges for at opfylde begge måldimensioner før wavelet-rekonstruktion og rasterudvidelse
Fliseadresserbare JPEG 2000-kodestrømme kan også afkode én valideret flise direkte gennem THPDFJpeg2000Decoder.LoadTileFromByteArray, hvor metadata for flisegitter og grænser for outputbytes eksponeres af dekoderen
Når et oprindeligt område skærer flere uafhængige fliser, tildeler LoadRegionFromByteArrayParallel privat OpenJPEG-tilstand til hver worker og sammensætter fuldførte rastere i deterministisk række-major-rækkefølge, mens annullering, outputgrænser og det effektive spidsbelastningshukommelsesbudget kan stoppe planlægningen eller vælge det sekventielle fallback
Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
Canvas.Draw(0, 0, Region);
finally
Region.Free;
end;