Semántica de renderizado avanzada

El renderizado de páginas cargadas preserva el estado anidado de Form XObject mientras aplica grupos de transparencia, máscaras suaves, procedimientos de glifo Type 3 y decodificación de regiones de imagen visibles sensible a la resolución

Trazos discontinuos en trazados

El renderizado nativo de trazados conserva los arrays de dash completos y su fase, incluidos los arrays de longitud impar, las longitudes fraccionarias y los dashes pintados de longitud cero con caps redondos o cuadrados; el patrón de dash se reinicia en cada subtrazado

Los trazos de color sólido y los recortes de trazo con patrón de gradiente comparten una única ruta de geometría de dash acotada, conservan las uniones dentro de las secciones pintadas continuas y unen las secciones pintadas a través del punto de inicio de un contorno cerrado

Las longitudes de dash conservan la escala media de la transformación actual del renderizador, mientras que la división de curvas usa aplanado adaptativo en espacio de dispositivo; el pintado de rellenos y el recorte pendiente siguen usando el trazado original sin dividir

Grupos de transparencia

Máscaras suaves

Funciones de transferencia y muestreadas

/TR2 tiene prioridad sobre /TR, una sola función se aplica a todos los canales de salida RGB, y un array de cuatro funciones aplica sus tres primeras entradas de forma independiente y conserva las entradas /Identity y /Default

Aplicar un nuevo estado de transferencia reemplaza cada canal de forma atómica, por lo que las entradas de identidad no pueden heredar valores de búsqueda de un estado de gráficos anterior

Las funciones muestreadas Type 0 admiten de una a cuatro dimensiones de entrada y salida, valores /BitsPerSample 1, 2, 4, 8, 12, 16, 24 y 32, asignaciones /Encode invertidas o directas, rangos /Decode independientes, interpolación multilineal, interpolación cúbica multidimensional y splines cúbicos naturales para datos unidimensionales /Order 3

Los bytes de muestra decodificados, las dimensiones validadas, las asignaciones y las derivadas cúbicas comparten una LRU de ocho entradas limitada a 64 MiB por hilo de renderizado, mientras que las funciones sobredimensionadas o malformadas fallan sin reemplazar parcialmente la tabla de búsqueda de transferencia activa

Pantallas de semitono

Las matrices de umbral Type 6, Type 10 y Type 16 se ejecutan directamente con longitudes decodificadas exactas, umbrales de 16 bits big-endian, comparación de componentes aditivos y tiras periódicas compactas que evitan expandir pantallas anguladas o de dos rectángulos

Los diccionarios Type 5 seleccionan pantallas /Red, /Green y /Blue independientes con reservas /Gray y /Default obligatorias, mientras que cada pantalla seleccionada puede anular la función de transferencia global

Los bytes de umbral validados y su geometría normalizada comparten una LRU de 64 entradas limitada a 64 MiB por renderizador, y las dimensiones malformadas, las asignaciones sobredimensionadas, los diccionarios Type 5 anidados o los desajustes de longitud de carga útil dejan el estado completo de pantalla activa en modo de tono continuo

Glifos Type 3

Los CharProcs Type 3 se ejecutan mediante el motor completo de operadores de contenido con el ámbito de recursos actual del diccionario de fuente, soporte de Form, recorte, imágenes, patrones y recursión acotada

d0 y d1 proporcionan métricas de glifo mientras que un procedimiento d1 mantiene el color seleccionado por el llamador según exige el modelo de imagen PDF

Los CharProcs repetidos reutilizan las listas de visualización decodificadas y tokenizadas cuando la fuente, el glifo, la matriz de dispositivo lineal y el estado de color coinciden; la traducción permanece dinámica para que los caracteres repetidos en diferentes posiciones compartan una entrada

La LRU por renderizador conserva como máximo 256 entradas y 131 072 tokens, omite cualquier CharProc por encima de 16 384 tokens e informa de su comportamiento mediante GetLastType3GlyphCacheStats

Regiones de imagen recortadas y reducidas

Los XObjects de imagen alineados con los ejes solicitan solo los límites de origen visibles y pasan el tamaño de píxel de dispositivo visible a la ruta de decodificación

Una imagen con una máscara suave se decodifica completa al tamaño con el que se dibuja, y su máscara al mismo tamaño, de modo que la máscara permanece alineada con la imagen mientras el recorte limita lo que se pinta; las máscaras JPEG usan el decodificador DCT de tamaño reducido

Al renderizar, una región decodificada que mida al menos el doble del tamaño dibujado en ambas direcciones se reduce exactamente al tamaño dibujado mediante promediado de área antes de dibujarse o guardarse en caché; así, una imagen grande dibujada pequeña cabe en la caché de decodificación, de forma que un grupo dibujado dos veces o una página repetida la reutiliza, y su máscara suave se aplica píxel a píxel a ese tamaño. Las máscaras de imagen stencil conservan su resolución completa, y los métodos públicos de decodificación de regiones devuelven sus tamaños documentados

JPEG 2000 combina la API de región nativa del decodificador con un nivel de resolución de potencia de dos seleccionado para cumplir ambas dimensiones de destino antes de la reconstrucción wavelet y la expansión de ráster

Los flujos de código JPEG 2000 direccionables por tesela también pueden decodificar una tesela validada directamente mediante THPDFJpeg2000Decoder.LoadTileFromByteArray, con metadatos de la cuadrícula de teselas y límites de bytes de salida expuestos por el decodificador

Cuando una región nativa intersecta varias teselas independientes, LoadRegionFromByteArrayParallel asigna estado OpenJPEG privado por trabajador y compone los rásteres completados en orden de fila principal determinista; la cancelación, los límites de salida y el presupuesto efectivo de memoria máxima pueden detener la programación o seleccionar la reserva secuencial

Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
  Canvas.Draw(0, 0, Region);
finally
  Region.Free;
end;

APIs relacionadas