Semantici avansate de randare
Randarea paginilor încărcate păstrează starea Form XObject imbricată în timp ce aplică grupuri de transparență, măști soft, proceduri de glife de tip 3 și decodare a regiunilor vizibile de imagine conștientă de rezoluție
Contururi punctate
Randarea nativă a căilor păstrează tablourile complete de punctate și faza lor, inclusiv tablourile de lungime impară, lungimile fracționare și punctatele pictate de lungime zero cu capete rotunde sau pătrate; modelul de punctare pornește de la zero pe fiecare subcale
Contururile cu culoare solidă și decupările de contur pentru pattern-urile cu gradient partajează o singură cale limitată de geometrie a punctatelor, păstrează îmbinările în interiorul secțiunilor pictate continue și unesc secțiunile pictate peste punctul de start al unui contur închis
Lungimile punctatelor păstrează scara medie curentă de transformare a renderer-ului, în timp ce divizarea curbelor folosește aplatizare adaptivă în spațiul dispozitivului; pictarea umpluturilor și decupările în așteptare continuă să folosească calea originală nedivizată
Grupuri de transparență
- Valorile
/Matrixale Form XObject sunt compuse cu matricea de transformare curentă înainte de rularea conținutului grupului - Grupurile izolate folosesc un plan alpha separat, astfel încât conținutul negru rămâne distins de pixelii transparenți
- Grupurile knockout înlocuiesc contribuția anterioară a grupului în zonele pictate suprapuse
- Conținutul grupului pornește din modul de amestecare Normal: modul de amestecare, alpha-ul constant și masca soft în vigoare la
Dose aplică grupului în ansamblu - Un grup pictat cu un alt mod de amestecare își amestecă propria culoare și alpha cu fundalul; un grup neizolat ale cărui stări grafice proprii se amestecă normal este desenat pe negru și pe alb pentru a-și recupera alpha-ul
- Grupurile sunt împărțite în plăci mărginite de 768 de pixeli, în timp ce pictarea GDI, faza halftone, grupurile imbricate, măștile soft și compozitarea păstrează coordonatele absolute ale dispozitivului
- Octeții Form sunt decodați și tokenizați o singură dată înainte de execuția plăcii, iar măștile temporare locale plăcii sunt eliberate înainte de următoarea placă
- Grupurile imbricate sunt suportate cu recursivitate mărginită și restaurare completă a stării grafice după fiecare invocare Form
Măști soft
- Măștile
/S /Alphași/S /Luminosityse evaluează pe baza grupului de mască - Grupul măștii este desenat cu amestecare Normal, indiferent de modul de amestecare pe care îl are starea grafică care stabilește masca
- Măștile de luminozitate rezolvă
/CSal grupului de transparență și cântăresc culoarea rezolvată cu aproximarea PDF DeviceGray, așa cum fac vizualizatoarele obișnuite; seteazăRenderColorimetricLuminosityMaskspentru a lua în schimb Y colorimetric CIE pentru spațiile bazate pe CIE /BCeste validat față de numărul exact de componente al spațiului de amestecare și furnizează luminozitatea convertită în afara conținutului de mască pictat- Pictarea Separation și DeviceN este convertită prin spațiul său alternativ Lab sau ICCBased, astfel încât componentele spot nu se scurg niciodată într-o mască soft
- Funcțiile de transfer
/TRsuportă funcții eșantionate, exponențiale, de cusătură și de calculator PostScript prin evaluatorul partajat de funcții /SMask /Noneanulează masca activă, iarqsauQpăstrează starea măștii în mod normal- Măștile compilate sunt reutilizate doar când dicționarul sursă, matricea de transformare curentă și intenția de randare se potrivesc toate
Funcții de transfer și eșantionate
/TR2 are prioritate față de /TR, o singură funcție se aplică fiecărui canal RGB de ieșire, iar un array de patru funcții aplică independent primele trei intrări, păstrând intrările /Identity și /Default
Aplicarea unei noi stări de transfer înlocuiește atomic fiecare canal, astfel încât intrările de identitate nu pot moșteni valori de căutare dintr-o stare grafică anterioară
Funcțiile eșantionate de tip 0 suportă una până la patru dimensiuni de intrare și ieșire, valorile /BitsPerSample 1, 2, 4, 8, 12, 16, 24 și 32, mapări /Encode inversate sau înainte, intervale /Decode independente, interpolare multiliniară, interpolare cubică multidimensională și spline cubice naturale pentru date unidimensionale /Order 3
Octeții de eșantion decodați, dimensiunile validate, mapările și derivatele cubice partajează un LRU cu opt intrări limitat la 64 MiB per fir de randare, în timp ce funcțiile supradimensionate sau malformate eșuează fără a înlocui parțial tabelul activ de căutare a transferului
Ecrane halftone
Tablourile de prag de tip 6, tip 10 și tip 16 se execută direct cu lungimi exacte decodate, praguri pe 16 biți big-endian, comparare a componentelor aditive și benzi periodice compacte care evită expandarea ecranelor înclinate sau cu două dreptunghiuri
Dicționarele de tip 5 selectează ecrane independente /Red, /Green și /Blue cu fallback-uri /Gray și /Default obligatorii, în timp ce fiecare ecran selectat poate suprascrie funcția globală de transfer
Octeții de prag validați și geometria lor normalizată partajează un LRU cu 64 de intrări limitat la 64 MiB per renderer, iar dimensiunile malformate, alocările supradimensionate, dicționarele de tip 5 imbricate sau nepotrivirile de lungime a încărcăturii utile lasă starea completă a ecranului activ în modul ton continuu
Glife de tip 3
CharProcs de tip 3 rulează prin motorul complet de operatori de conținut cu scopul curent de resurse al dicționarului de font, suport Form, decupare, imagini, modele și recursivitate mărginită
d0 și d1 oferă metrice de glife, în timp ce o procedură d1 păstrează culoarea selectată de apelant, conform cerințelor modelului de imagistică PDF
CharProcs repetate reutilizează liste de afișare decodate și tokenizate când fontul, glifa, matricea liniară de dispozitiv și starea culorii se potrivesc; translația rămâne dinamică, astfel încât caracterele repetate la poziții diferite partajează o singură intrare
LRU-ul per renderer reține cel mult 256 de intrări și 131.072 de token-uri, ocolește orice CharProc peste 16.384 de token-uri și raportează comportamentul său prin GetLastType3GlyphCacheStats
Regiuni de imagine decupate și reduse
XObject-urile de imagine aliniate pe axe solicită doar limitele vizibile ale sursei și transmit dimensiunea vizibilă a pixelilor de dispozitiv în calea de decodare
O imagine cu mască soft este decodată integral la dimensiunea la care este desenată, iar masca ei la aceeași dimensiune, astfel încât masca rămâne aliniată cu imaginea în timp ce decuparea limitează ceea ce este pictat; măștile JPEG folosesc decodorul DCT la dimensiune redusă
La randare, o regiune decodată care este cel puțin de două ori mai mare decât dimensiunea desenată în ambele direcții este redusă exact la dimensiunea desenată prin mediere de arie înainte de a fi desenată sau pusă în cache; o imagine mare desenată mică încape atunci în cache-ul de decodare, astfel încât un grup desenat de două ori sau o pagină repetată o reutilizează, iar masca sa soft este aplicată pixel cu pixel la acea dimensiune. Măștile de imagine stencil își păstrează rezoluția completă, iar metodele publice de decodare a regiunilor returnează dimensiunile lor documentate
JPEG 2000 combină API-ul nativ de regiune al decodorului cu un nivel de rezoluție putere a lui doi selectat pentru a îndeplini ambele dimensiuni țintă înainte de reconstrucția wavelet și expansiunea rasterului
Fluxurile de cod JPEG 2000 adresabile pe plăci pot decoda, de asemenea, o placă validată direct prin THPDFJpeg2000Decoder.LoadTileFromByteArray, cu metadatele grilei de plăci și limitele de octeți de ieșire expuse de decodor
Când o regiune nativă intersectează mai multe plăci independente, LoadRegionFromByteArrayParallel atribuie stare OpenJPEG privată per worker și compune rasterele finalizate în ordine deterministă majoră pe rânduri; anularea, limitele de ieșire și bugetul efectiv de memorie de vârf pot opri planificarea sau pot selecta fallback-ul secvențial
Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
Canvas.Draw(0, 0, Region);
finally
Region.Free;
end;