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

Maschere morbide

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;

API correlate