Avansert renderingssemantikk
Rendering av lastede sider bevarer nestet Form XObject-tilstand mens den bruker transparensgrupper, myke masker, Type 3-glyfprosedyrer og oppløsningsbevisst avkoding av synlige bildeområder
Stiplede banestreker
Native bane-rendering bevarer komplette dash-arrayer og fasen deres, inkludert arrayer med oddetallslengde, fraksjonelle lengder og null-lange malte dasher med runde eller firkantede caps; dash-mønsteret starter på nytt for hver delbane
Solidfargede streker og gradient-mønster-stroke-klipp deler én avgrenset dash-geometribane, beholder skjøter inne i sammenhengende malte seksjoner og kobler malte seksjoner over startpunktet til en lukket kontur
Dash-lengder beholder rendererens gjennomsnittlige skalering av gjeldende transformasjon, mens kurvesplitting bruker adaptiv flattening i enhetsrom; fyllmaling og ventende klipping fortsetter å bruke den opprinnelige usplittede banen
Transparensgrupper
- Form XObject-
/Matrix-verdier kombineres med den nåværende transformasjonsmatrisen før gruppeinnholdet kjører - Isolerte grupper bruker et eget alfaplan slik at svart innhold forblir adskillbart fra transparente piksler
- Knockout-grupper erstatter det forrige gruppebidraget i overlappende malte områder
- Gruppeinnhold starter i Normal-blandingsmodus: blandingsmodusen, konstant alfa og myk maske som gjelder ved
Dobrukes på gruppen som helhet - En gruppe som males med en annen blandingsmodus blander sin egen farge og alfa med bakgrunnen; en ikke-isolert gruppe hvis egne grafikk-tilstander blander normalt, tegnes på svart og på hvitt for å hente ut alfaen
- Grupper deles inn i avgrensede 768-piksel-fliser mens GDI-maling, halftone-fase, nestede grupper, myke masker og kompositering beholder absolutte enhetskoordinater
- Form-byte avkodes og gjøres om til tokeniserte strømmer én gang før fliseutførelse, og midlertidige fliselokale masker frigis før neste flise
- Nestede grupper støttes med avgrenset rekursjon og full gjenoppretting av grafikk-tilstanden etter hver Form-påkallelse
Myke masker
/S /Alpha- og/S /Luminosity-masker vurderes fra maske-Gruppen- Maskegruppen tegnes med Normal-blanding, uansett hvilken blandingsmodus grafikk-tilstanden som setter masken har
- Luminositetsmasker løser transparensgruppens
/CSog vekter den løste fargen med PDF-DeviceGray-tilnærmingen, slik vanlige visningsprogrammer gjør; settRenderColorimetricLuminosityMasksfor å i stedet bruke kolorimetrisk CIE-Y for CIE-baserte rom /BCvalideres mot det eksakte blandingsrommets komponentantall og leverer den konverterte luminositeten utenfor malt maskeinnhold- Separation- og DeviceN-maling konverteres gjennom dets alternative Lab- eller ICCBased-rom slik at spot-komponenter aldri lekker inn i en myk maske
/TR-overføringsfunksjoner støtter samplede, eksponentielle, lavte og PostScript-kalkulatorfunksjoner gjennom den delte funksjonsverdikatoren/SMask /Nonefjerner den aktive masken, ogqellerQbevarer masketilstanden normalt- Kompilerte masker brukes bare på nytt når kildeordboken, den nåværende transformasjonsmatrisen og renderings-intensjonen alle stemmer
Overførings- og samplede funksjoner
/TR2 har forrang over /TR, en enkelt funksjon gjelder for hver RGB-utgangskanal, og en firefunksjons-tabell bruker de tre første oppføringene sine uavhengig mens den bevarer /Identity- og /Default-oppføringer
Å bruke en ny overføringstilstand erstatter hver kanal atomisk, så identitetsoppføringer kan ikke arve oppslagsverdier fra en tidligere grafikk-tilstand
Type 0 samplede funksjoner støtter én til fire inngangs- og utgangsdimensjoner, /BitsPerSample-verdier 1, 2, 4, 8, 12, 16, 24 og 32, reverserte eller framoverskridende /Encode-kartlegginger, uavhengige /Decode-områder, multilineær interpolasjon, flerdimensjonal kubisk interpolasjon og naturlige kubiske splines for endimensjonale /Order 3-data
Avkodede sample-byte, validerte dimensjoner, kartlegginger og kubiske derivater deler en åtte-post-LRU taket på 64 MiB per renderingstråd, mens overstore eller feilformede funksjoner feiler uten delvis å erstatte den aktive overførings-oppslagstabellen
Halftone-skjermer
Type 6-, Type 10- og Type 16-terskelmatriser kjører direkte med eksakte dekodede lengder, big-endian 16-bits terskler, additiv-komponent-sammenligning og kompakte periodiske striper som unngår å utvide vinklede eller to-rektangel-skjermer
Type 5-ordbøker velger uavhengige /Red-, /Green- og /Blue-skjermer med /Gray- og nødvendige /Default-fallback-er, mens hver valgte skjerm kan overstyre den globale overføringsfunksjonen
Validerte terskel-byte og deres normaliserte geometri deler en 64-post-LRU taket på 64 MiB per renderer, og feilformede dimensjoner, overstore allokeringer, nestede Type 5-ordbøker eller nyttelastlengde-avvik etterlater hele den aktive skjermtilstanden i kontinuerlig-tone-modus
Type 3-glyfer
Type 3-CharProcs kjører gjennom hele innholdsoperator-motoren med fontordbokens nåværende ressursomfang, Form-støtte, klipping, bilder, mønstre og avgrenset rekursjon
d0 og d1 gir glyf-metrikker mens en d1-prosedyre beholder kalleren-valgte fargen som PDF-imagingmodellen krever
Gjentatte CharProcs gjenbruker dekodede og tokeniserte visningslister når font, glyf, lineær enhetsmatrise og fargetilstand stemmer; oversettelse forblir dynamisk slik at gjentatte tegn ved ulike posisjoner deler én oppføring
Per-renderer-LRU-en beholder høyst 256 oppføringer og 131 072 tokens, hopper over enhver CharProc over 16 384 tokens, og rapporterer oppførselen sin gjennom GetLastType3GlyphCacheStats
Klippede og nedskalerte bildeområder
Aksejusterte bilde-XObject-er ber bare om synlige kildegrenser og sender den synlige enhets-pikselstørrelsen inn i avkodingsbanen
Et bilde med myk maske dekodes i sin helhet i størrelsen det tegnes i, og masken dets i samme størrelse, slik at masken forblir justert mot bildet mens klippingen begrenser det som males; JPEG-masker bruker DCT-dekoderen med redusert størrelse
Ved rendering krympes et dekodet område som er minst dobbelt så stort som tegnestørrelsen i begge retninger til nøyaktig tegnestørrelsen ved gjennomsnitt av arealer før det tegnes eller cached; en stort bilde som tegnes lite passer da i avkode-cachen, slik at en gruppe som tegnes to ganger eller en gjentatt side gjenbruker det, og den myke masken brukes piksel for piksel i den størrelsen. Stencil-bildemasker beholder sin fulle oppløsning, og de offentlige område-avkodingsmetodene returnerer sine dokumenterte størrelser
JPEG 2000 kombinerer dekoderens native område-API med et power-of-two-oppløsningsnivå valgt for å møte begge måldimensjonene før wavelet-rekonstruksjon og rastreringsutvidelse
Flisdresserbare JPEG 2000-kodestrømmer kan også dekode én validert flise direkte gjennom THPDFJpeg2000Decoder.LoadTileFromByteArray, med flisegitter-metadata og utgående bytegrenser eksponert av dekoderen
Når et native område krysser flere uavhengige fliser, tildeler LoadRegionFromByteArrayParallel privat OpenJPEG-tilstand per arbeider og komponerer fullførte rastre i deterministisk rad-og-kolonne-rekkefølge; kansellering, utgangsgrenser og det effektive topp-minnebudsjettet kan stoppe planlegging eller velge den sekvensielle fallback-en
Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
Canvas.Draw(0, 0, Region);
finally
Region.Free;
end;