Geavanceerde renderingsemantiek
Rendering van geladen pagina's behoudt geneste Form-XObject-status terwijl het transparantiegroepen, soft masks, Type 3-glyphprocedures en resolutiebewuste decodering van zichtbare beeldregio's toepast
Gestreepte padlijnstreken
Native padrendering behoudt volledige dash-arrays en hun fase, inclusief arrays met oneven lengte, fractionele lengtes en nul-lange geschilderde streepjes met ronde of vierkante caps; het dashpatroon start opnieuw bij elk subpad
Effen lijnstreken en gradient-patroon-strokeclips delen één begrensd dash-geometriepad, behouden verbindingen binnen doorlopende geschilderde secties en verbinden geschilderde secties over het startpunt van een gesloten contour heen
Dashlengtes behouden de gemiddelde current-transformation-schaal van de renderer, terwijl curve-splitsing adaptieve apparaatruimte-flattening gebruikt; vulling en pending clipping blijven het originele, ongesplitste pad gebruiken
Transparantiegroepen
- Form-XObject-
/Matrix-waarden worden samengesteld met de huidige transformatiematrix voordat groepsinhoud wordt uitgevoerd - Geïsoleerde groepen gebruiken een apart alfavlak zodat zwarte inhoud te onderscheiden blijft van transparante pixels
- Knockout-groepen vervangen de eerdere groepsbijdrage in overlappende geverfde gebieden
- Groepsinhoud begint met de Normal-blendmodus: de blendmodus, constante alfa en soft mask die gelden bij
Dogelden voor de groep als geheel - Een groep die met een andere blendmodus is geschilderd, mengt zijn eigen kleur en alfa met de achtergrond; een niet-geïsoleerde groep waarvan de eigen grafische statussen normaal blenden, wordt op zwart en op wit getekend om zijn alfa terug te winnen
- Groepen worden gesplitst in begrensde 768-pixeltegels terwijl GDI-schildering, halftone-fase, geneste groepen, soft masks en compositing absolute apparaatcoördinaten behouden
- Formbytes worden één keer gedecodeerd en getokeniseerd vóór tegeluitvoering, en tijdelijke tegel-lokale masks worden vrijgegeven vóór de volgende tegel
- Geneste groepen worden ondersteund met begrensde recursie en volledig herstel van de grafische status na elke Form-aanroep
Soft masks
/S /Alpha- en/S /Luminosity-masks worden geëvalueerd uit de maskergroep- De maskergroep wordt met Normal-blending getekend, welke blendmodus de grafische status die het mask instelt ook draagt
- Luminosity-masks lossen de transparantiegroep-
/CSop en passen op de opgeloste kleur de PDF-DeviceGray-benadering toe, zoals gangbare viewers doen; stelRenderColorimetricLuminosityMasksin om voor CIE-gebaseerde ruimten in plaats daarvan colorimetrische CIE Y te gebruiken /BCwordt gevalideerd tegen het exacte componentaantal van de blendruimte en levert de omgezette luminositeit buiten geverfde maskerinhoud- Separation- en DeviceN-verf wordt omgezet via de alternatieve Lab- of ICCBased-ruimte zodat spotcomponenten nooit in een soft mask lekken
/TR-overdrachtsfuncties ondersteunen bemonsterde, exponentiële, stik- en PostScript-rekenfuncties via de gedeelde functie-evaluator/SMask /Nonewist het actieve mask enqofQbehoudt de maskstatus normaal- Gecompileerde masks worden alleen hergebruikt wanneer de bronwoordenlijst, de huidige transformatiematrix en de renderintentie allemaal overeenkomen
Overdrachts- en bemonsterde functies
/TR2 heeft voorrang op /TR, één functie geldt voor elk RGB-uitvoerkanaal en een vier-functiearray past de eerste drie vermeldingen onafhankelijk toe terwijl /Identity- en /Default-vermeldingen worden behouden
Toepassen van een nieuwe overdrachtsstatus vervangt elk kanaal atomair, dus identiteitsvermeldingen kunnen geen opzoekwaarden overerven van een eerdere grafische status
Type 0-bemonsterde functies ondersteunen een tot vier invoer- en uitvoerdimensies, /BitsPerSample-waarden 1, 2, 4, 8, 12, 16, 24 en 32, omgekeerde of voorwaartse /Encode-mappingen, onafhankelijke /Decode-bereiken, multilineaire interpolatie, multidimensionale kubische interpolatie en natuurlijke kubische splines voor eendimensionale /Order 3-gegevens
Gedecodeerde samplebytes, gevalideerde dimensies, mappingen en kubische afgeleiden delen een LRU met acht vermeldingen, begrensd op 64 MiB per rendering-thread, terwijl overgrote of ongeldige functies falen zonder de actieve overdrachts-opzoektabel gedeeltelijk te vervangen
Halftone-schermen
Type 6-, Type 10- en Type 16-drempelarrays worden rechtstreeks uitgevoerd met exacte gedecodeerde lengtes, big-endian 16-bit-drempels, additieve-componentvergelijking en compacte periodieke strips die schuine of twee-rechthoeksschermen vermijden uit te breiden
Type 5-woordenlijsten selecteren onafhankelijke /Red-, /Green- en /Blue-schermen met /Gray- en vereiste /Default-teugval, terwijl elk geselecteerd scherm de globale overdrachtsfunctie kan overschrijven
Gevallideerde drempelbytes en hun genormaliseerde geometrie delen een LRU met 64 vermeldingen, begrensd op 64 MiB per renderer, en ongeldige dimensies, overgrote toewijzingen, geneste Type 5-woordenlijsten of lengteverschillen in payload laten de volledige actieve schermstatus in continue-tonemodus
Type 3-glyphs
Type 3-CharProcs worden uitgevoerd door de volledige content-operator-engine met de huidige resource-scope van de lettertypewoordenlijst, Form-ondersteuning, clipping, afbeeldingen, patronen en begrensde recursie
d0 en d1 leveren glyphmetrieken terwijl een d1-procedure de door de aanroeper gekozen kleur behoudt, zoals vereist door het PDF-imagingmodel
Herhaalde CharProcs hergebruiken gedecodeerde en getokeniseerde display-lists wanneer lettertype, glyph, lineaire apparaatmatrix en kleurstatus overeenkomen; translatie blijft dynamisch zodat herhaalde tekens op verschillende posities één vermelding delen
De per-renderer LRU behoudt maximaal 256 vermeldingen en 131.072 tokens, slaat elke CharProc boven 16.384 tokens over en rapporteert zijn gedrag via GetLastType3GlyphCacheStats
Geclipte en verkleinde beeldregio's
As-uitgelijnde beeld-XObjecten vragen alleen zichtbare bronbereiken aan en geven de zichtbare apparaatpixelgrootte door aan het decodeerpad
Een afbeelding met een soft mask wordt als geheel gedecodeerd op de grootte waarop hij wordt getekend, en zijn mask op dezelfde grootte, zodat het mask uitgelijnd blijft met de afbeelding terwijl clipping beperkt wat wordt geschilderd; JPEG-masks gebruiken de DCT-decoder voor verminderde grootte
Bij rendering wordt een gedecodeerde regio die in beide richtingen ten minste tweemaal de getekende grootte is, vóór het tekenen of cachen via vlakgemiddelde exact teruggebracht tot de getekende grootte; een grote afbeelding die klein wordt getekend past dan in de decodeercache, zodat een groep die tweemaal wordt getekend of een herhaalde pagina hem hergebruikt, en zijn soft mask wordt op die grootte pixel voor pixel toegepast. Stencil-imagemasks behouden hun volledige resolutie, en de openbare regio-decoderingsmethoden geven hun gedocumenteerde groottes terug
JPEG 2000 combineert de native region-API van de decoder met een machts-van-twee-resolutieniveau dat is geselecteerd om beide doeldimensies te halen vóór wavelet-reconstructie en rasteruitbreiding
Tegel-adresseerbare JPEG 2000-codestreams kunnen ook één gevalideerde tegel rechtstreeks decoderen via THPDFJpeg2000Decoder.LoadTileFromByteArray, met tegelraster-metagegevens en uitvoerbyte-limieten die door de decoder worden blootgelegd
Wanneer een native regio meerdere onafhankelijke tegels kruist, wijst LoadRegionFromByteArrayParallel per worker privé-OpenJPEG-status toe en stelt voltooide rasters samen in deterministische rij-hoofdvolgorde; annulering, uitvoerlimieten en het effectieve piekgeheugenbudget kunnen planning stoppen of de sequentiële teugval selecteren
Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
Canvas.Draw(0, 0, Region);
finally
Region.Free;
end;