Semantica di Rendering Avanzata
Il rendering delle pagine caricate preserva lo stato annidato del Form XObject applicando gruppi di trasparenza, maschere morbide, procedure di glifi Type 3 e decodifica delle regioni immagine visibili sensibile alla risoluzione
Tratti di percorso tratteggiati
Il rendering nativo dei percorsi preserva gli array di dash completi e la loro fase, inclusi array di lunghezza dispari, lunghezze frazionarie e dash di lunghezza zero dipinti con cap round o square; il dash pattern riparte a ogni sottopercorso
I tratti a tinta unita e i clip di tratto con pattern a gradiente condividono un'unica geometria dash limitata, conservano le join dentro le sezioni dipinte continue e saldano le sezioni dipinte attraverso il punto di inizio di un contorno chiuso
Le lunghezze dei dash conservano la scala media della trasformazione corrente del renderer, mentre la suddivisione delle curve usa un flattening adattivo nello spazio dispositivo; il riempimento e il clipping in sospeso continuano a usare il percorso originale non suddiviso
Gruppi di trasparenza
- I valori
/Matrixdel Form XObject vengono composti con la matrice di trasformazione corrente prima dell'esecuzione del contenuto del gruppo - I gruppi isolati usano un piano alfa separato, così che il contenuto nero rimanga distinguibile dai pixel trasparenti
- I gruppi knockout sostituiscono il contributo del gruppo precedente nelle aree dipinte sovrapposte
- Il contenuto del gruppo parte dalla modalità di blend Normal: la modalità di blend, l'alfa costante e la maschera morbida in vigore al momento di
Dosi applicano al gruppo nel suo complesso - Un gruppo dipinto con un'altra modalità di blend fonde il proprio colore e la propria alfa con lo sfondo; un gruppo non isolato i cui stati grafici interni fanno blending normale viene disegnato su nero e su bianco per recuperare la sua alfa
- I gruppi vengono suddivisi in tessere limitate di 768 pixel mentre il disegno GDI, la fase di mezzatinta, i gruppi annidati, le maschere morbide e il compositing mantengono coordinate assolute del dispositivo
- I byte del Form vengono decodificati e tokenizzati una volta prima dell'esecuzione delle tessere e le maschere temporanee locali alle tessere vengono rilasciate prima della tessera successiva
- I gruppi annidati sono supportati con ricorsione limitata e ripristino completo dello stato grafico dopo ogni invocazione di Form
Maschere morbide
- Le maschere
/S /Alphae/S /Luminosityvengono valutate dal gruppo della maschera - Il gruppo della maschera viene disegnato con blending Normal, quale che sia la modalità di blend dello stato grafico che imposta la maschera
- Le maschere di luminosità risolvono il
/CSdel gruppo di trasparenza e ponderano il colore risolto con l'approssimazione DeviceGray PDF, come fanno i viewer comuni; impostareRenderColorimetricLuminosityMasksper usare invece il Y CIE colorimetrico per gli spazi basati su CIE /BCviene validato rispetto al conteggio esatto dei componenti dello spazio di blending e fornisce la luminosità convertita all'esterno del contenuto della maschera dipinto- La resa Separation e DeviceN viene convertita tramite il suo spazio alternativo Lab o ICCBased, così che i componenti spot non filtri mai in una maschera morbida
- Le funzioni di trasferimento
/TRsupportano funzioni campionate, esponenziali, di stitching e calcolatore PostScript tramite il valutatore di funzioni condiviso /SMask /Nonecancella la maschera attiva eqoQpreserva normalmente lo stato della maschera- Le maschere compilate vengono riusate solo quando il dizionario sorgente, la matrice di trasformazione corrente e l'intento di rendering corrispondono tutti
Funzioni di trasferimento e campionate
/TR2 ha precedenza su /TR, una singola funzione si applica a ogni canale di output RGB e un array di quattro funzioni applica le sue prime tre voci in modo indipendente preservando le voci /Identity e /Default
Applicare un nuovo stato di trasferimento sostituisce ogni canale in modo atomico, così che le voci di identità non possano ereditare i valori di lookup da uno stato grafico precedente
Le funzioni campionate Tipo 0 supportano da una a quattro dimensioni di input e output, valori /BitsPerSample 1, 2, 4, 8, 12, 16, 24 e 32, mappature /Encode invertite o dirette, intervalli /Decode indipendenti, interpolazione multilineare, interpolazione cubica multidimensionale e spline cubiche naturali per dati /Order 3 monodimensionali
I byte campionati decodificati, le dimensioni validate, le mappature e le derivate cubiche condividono una LRU a otto voci limitata a 64 MiB per thread di rendering, mentre funzioni sovradimensionate o non valide falliscono senza sostituire parzialmente la tabella di trasferimento attiva
Schermi di mezzatinta
Gli array di soglia Tipo 6, Tipo 10 e Tipo 16 vengono eseguiti direttamente con lunghezze decodificate esatte, soglie a 16 bit big-endian, confronto di componenti additivi e strisce periodiche compatte che evitano di espandere schermi angolati o a due rettangoli
I dizionari Tipo 5 selezionano schermi /Red, /Green e /Blue indipendenti con fallback /Gray e /Default obbligatorio, mentre ogni schermo selezionato può sovrascrivere la funzione di trasferimento globale
I byte di soglia validati e la loro geometria normalizzata condividono una LRU a 64 voci limitata a 64 MiB per renderer e dimensioni non valide, allocazioni sovradimensionate, dizionari Tipo 5 annidati o disallineamenti della lunghezza del payload lasciano lo stato completo dello schermo attivo in modalità a tono continuo
Glifi Type 3
I CharProcs Type 3 vengono eseguiti tramite il motore completo degli operatori di contenuto con l'ambito delle risorse corrente del dizionario del font, supporto Form, ritaglio, immagini, pattern e ricorsione limitata
d0 e d1 forniscono le metriche dei glifi mentre una procedura d1 mantiene il colore selezionato dal chiamante come richiesto dal modello di imaging PDF
I CharProcs ripetuti riusano le liste di visualizzazione decodificate e tokenizzate quando font, glifo, matrice lineare del dispositivo e stato del colore corrispondono; la traduzione rimane dinamica, così che caratteri ripetuti in posizioni diverse condividano una voce
La LRU per renderer conserva al massimo 256 voci e 131.072 token, ignora ogni CharProc sopra i 16.384 token e riporta il suo comportamento tramite GetLastType3GlyphCacheStats
Regioni immagine ritagliate e ridotte
Gli XObject immagine allineati agli assi richiedono solo i confini sorgente visibili e passano la dimensione in pixel del dispositivo visibile nel percorso di decodifica
Un'immagine con una maschera morbida viene decodificata per intero alla dimensione con cui viene disegnata, e la sua maschera alla stessa dimensione, così che la maschera resti allineata all'immagine mentre il ritaglio limita ciò che viene dipinto; le maschere JPEG usano il decoder DCT a dimensione ridotta
Durante il rendering, una regione decodificata almeno il doppio della dimensione disegnata in entrambe le direzioni viene ridotta esattamente alla dimensione disegnata per media d'area prima di essere disegnata o messa in cache; un'immagine grande disegnata piccola entra allora nella cache di decodifica, così che un gruppo disegnato due volte o una pagina ripetuta la riutilizzi, e la sua maschera morbida viene applicata pixel per pixel a quella dimensione. Le maschere immagine stencil conservano la loro risoluzione completa, e i metodi pubblici di decodifica delle regioni restituiscono le dimensioni documentate
JPEG 2000 combina l'API di regione nativa del decoder con un livello di risoluzione potenza di due selezionato per soddisfare entrambe le dimensioni di destinazione prima della ricostruzione wavelet e dell'espansione raster
I codestream JPEG 2000 indirizzabili a tessere possono anche decodificare una tessera validata direttamente tramite THPDFJpeg2000Decoder.LoadTileFromByteArray, con metadati della griglia di tessere e limiti dei byte di output esposti dal decoder
Quando una regione nativa interseca più tessere indipendenti, LoadRegionFromByteArrayParallel assegna uno stato OpenJPEG privato a ogni worker e compone i raster completati in ordine deterministico per riga; la cancellazione, i limiti di output e il budget di picco della memoria effettivo possono interrompere la pianificazione o selezionare il fallback sequenziale
Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
Canvas.Draw(0, 0, Region);
finally
Region.Free;
end;