Avancerad renderingssemantik
Rendering av inlästa sidor bevarar nästlade Form XObject-tillstånd samtidigt som transparensgrupper, mjuka masker, Type 3-glyfprocedurer och upplösningsmedveten avkodning av synliga bildregioner tillämpas
Streckade pennstreck
Inbyggd banrendering bevarar fullständiga streckmönster och deras fas, inklusive arrayer med udda längd, bråktalslängder och nollängdsstreck som målas med rund eller fyrkantig ändkappa; streckmönstret börjar om vid varje delbana
Streck i helfärg och klippning av gradientmönsterstreck delar en gemensam avgränsad streckgeometriväg, behåller skarvar inuti sammanhängande målade avsnitt och fogar ihop målade avsnitt över en sluten konturs startpunkt
Strecklängder behåller renderarens medelvärde av den aktuella transformationens skala, medan kurvuppdelning använder adaptiv plattning i enhetsrymden; fyllnadsmålning och väntande klippning fortsätter att använda den ursprungliga, oudelade banan
Transparensgrupper
- Form XObject-
/Matrix-värden komponeras med den aktuella transformationsmatrisen innan gruppinnehållet körs - Isolerade grupper använder ett separat alfplan så att svart innehåll förblir skiljbart från transparenta pixlar
- Knockout-grupper ersätter det tidigare gruppbidraget i överlappande målade områden
- Gruppinnehåll börjar från Normal-blandningsläget: blandningsläget, den konstanta alfa och den mjuka mask som gäller vid
Dotillämpas på gruppen som helhet - En grupp som målas med ett annat blandningsläge blandar sin egen färg och alfa med underlaget; en icke-isolerad grupp vars egna grafiktillstånd blandas normalt ritas på svart och på vitt för att återvinna dess alfa
- Grupper delas upp i begränsade 768-pixelplattor medan GDI-målning, halvtonsfas, nästlade grupper, mjuka masker och kompositering behåller absoluta enhetskoordinater
- Formbyte avkodas och tokeniseras en gång före plattexekvering, och temporära plat-lokala masker frigörs före nästa platta
- Nästlade grupper stöds med begränsad rekursion och fullständig återställning av grafikstillståndet efter varje Form-anrop
Mjuka masker
/S /Alpha- och/S /Luminosity-masker utvärderas från maskgruppen- Maskgruppen ritas med Normal-blandning, oavsett vilket blandningsläge det grafiktillstånd som sätter masken har
- Luminositetsmasker löser upp transparensgruppens
/CSoch väger den lösta färgen med PDF:s DeviceGray-approximation, som vanliga visare gör; ställRenderColorimetricLuminosityMasksför att i stället ta kolorimetriskt CIE Y för CIE-baserade rum /BCvalideras mot det exakta antalet blandningsrumskomponenter och förser den konverterade luminositeten utanför målat maskinnehåll- Separation- och DeviceN-målning konverteras genom dess alternativa Lab- eller ICCBased-rum så att fläckkomponenter aldrig läcker in i en mjuk mask
/TR-överföringsfunktioner stöder provtagna, exponentiella, sömnads- och PostScript-räknarfunktioner genom den delade funktionsutvärderaren/SMask /Nonerensar den aktiva masken ochqellerQbevarar masktillståndet normalt- Kompilerade masker återanvänds endast när källordlistan, den aktuella transformationsmatrisen och renderingsavsikten alla matchar
Överförings- och provtagna funktioner
/TR2 har företräde framför /TR, en enda funktion tillämpas på varje RGB-utgångskanal, och en fyrafunktions-array tillämpar sina första tre poster oberoende samtidigt som /Identity- och /Default-poster bevaras
Tillämpning av ett nytt överföringstillstånd ersätter varje kanal atomärt, så identitetsposter kan inte ärva uppslagsvärden från ett tidigare grafikstillstånd
Typ 0-provtagna funktioner stöder en till fyra in- och utgångsdimensioner, /BitsPerSample-värdena 1, 2, 4, 8, 12, 16, 24 och 32, omvända eller framåt-/Encode-mappningar, oberoende /Decode-intervall, flerlinjär interpolering, flerdimensionell kubisk interpolering och naturliga kubiska splines för endimensionell /Order 3-data
Avkodade provbyte, validerade dimensioner, mappningar och kubiska derivator delar en åttaposters LRU med tak på 64 MiB per renderingstråd, medan överdimensionerade eller felformaterade funktioner misslyckas utan att delvis ersätta den aktiva överföringsuppslagstabellen
Halvtonsskärmar
Typ 6-, Typ 10- och Typ 16-tröskelarrayer körs direkt med exakta avkodade längder, big-endian 16-bitars-trösklar, jämförelse av additiva komponenter och kompakta periodiska band som undviker att expandera vinklade eller två-rektangulära skärmar
Typ 5-ordlistor väljer oberoende /Red-, /Green- och /Blue-skärmar med /Gray- och obligatoriska /Default-fallbacks, medan varje vald skärm kan åsidosätta den globala överföringsfunktionen
Validerade tröskelbyte och deras normaliserade geometri delar en 64-posters LRU med tak på 64 MiB per renderare, och felformaterade dimensioner, överdimensionerade allokeringar, nästlade Typ 5-ordlistor eller längd-mismatchar i nyttolasten lämnar det fullständiga aktiva skärmtillståndet i kontinuerlig-tonläge
Type 3-glyfer
Type 3-CharProc:er körs genom den fullständiga innehållsoperator-motorn med teckensnittsordlistans aktuella resursomfång, Form-stöd, klippning, bilder, mönster och begränsad rekursion
d0 och d1 tillhandahåller glyfmetriker medan en d1-procedur behåller den anropare-valda färgen som krävs av PDF-avbildningsmodellen
Upprepade CharProc:er återanvänder avkodade och tokeniserade visningslistor när teckensnitt, glyf, linjär enhetsmatris och färgtillstånd matchar; översättningen förblir dynamisk så att upprepade tecken vid olika positioner delar en post
Den per-renderare LRU:n behåller högst 256 poster och 131,072 token, förbigår alla CharProc över 16,384 token och rapporterar sitt beteende genom GetLastType3GlyphCacheStats
Klippta och nedskalade bildregioner
Axeljusterade bild-XObjects begär endast synliga källgränser och skickar den synliga enhetspixelstorleken vidare i avkodningssökvägen
En bild med mjuk mask avkodas i sin helhet i den storlek den ritas i, och dess mask i samma storlek, så att masken förblir justerad mot bilden medan klippningen begränsar vad som målas; JPEG-masker använder DCT-avkodaren med reducerad storlek
Vid rendering krymper en avkodad region som är minst dubbla den ritade storleken i båda riktningar till exakt den ritade storleken genom area-medelvärdesbildning innan den ritas eller cachas; en stor bild som ritas liten får då plats i avkodningscachen, så att en grupp som ritas två gånger eller en upprepad sida återanvänder den, och dess mjuka mask appliceras pixel för pixel i den storleken. Stencil-bildmasker behåller sin fulla upplösning, och de publika regionsavkodningsmetoderna returnerar sina dokumenterade storlekar
JPEG 2000 kombinerar avkodarens inbyggda region-API med en tvånpotens-upplösningsnivå som väljs för att uppfylla båda måldimensionerna före wavelet-rekonstruktion och rasterexpansion
Platt-adresserbara JPEG 2000-kodströmmar kan även avkoda en validerad platta direkt genom THPDFJpeg2000Decoder.LoadTileFromByteArray, med plattgridsmetadata och utgångsbytesgränser exponerade av avkodaren
När en nativ region skär flera oberoende plattor tilldelar LoadRegionFromByteArrayParallel privat OpenJPEG-tillstånd per arbetare och komponerar färdiga raster i deterministisk rad-huvudordning; annullering, utgångsgränser och den effektiva toppminnesbudgeten kan stoppa schemaläggningen eller välja sekventiell fallback
Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
Canvas.Draw(0, 0, Region);
finally
Region.Free;
end;