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ță

Măști soft

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;

API-uri conexe