Semántica de renderización avanzada

La renderización de páginas cargadas conserva el estado anidado de Form XObject al aplicar grupos de transparencia, máscaras suaves, procedimientos de glifos Tipo 3 y decodificación de regiones de imagen visibles consciente de la resolución

Trazos de paths punteados

La renderización nativa de paths preserva los dash arrays completos y su fase, incluidos los arrays de longitud impar, las longitudes fraccionarias y los dashes pintados de longitud cero con caps round o square; el patrón de dashes se reinicia en cada subpath

Los trazos de color sólido y los clips de trazo con patrones de gradiente comparten una única ruta de geometría de dashes acotada, conservan los joins 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 renderer, mientras que la división de curvas usa aplanado adaptativo en espacio de dispositivo; el pintado de rellenos y el clipping pendiente siguen usando el path 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 arreglo de cuatro funciones aplica sus tres primeras entradas de forma independiente y conserva las entradas /Identity y /Default

Aplicar un estado de transferencia nuevo 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 de Tipo 0 admiten de una a cuatro dimensiones de entrada y salida, valores de /BitsPerSample 1, 2, 4, 8, 12, 16, 24 y 32, asignaciones de /Encode invertidas o directas, rangos /Decode independientes, interpolación multilineal, interpolación cúbica multidimensional y splines cúbicos naturales para datos unidimensionales de /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 renderización, mientras que las funciones sobredimensionadas o mal formadas fallan sin reemplazar parcialmente la tabla de búsqueda de transferencia activa

Pantallas de semitonos

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

Los diccionarios de Tipo 5 seleccionan pantallas /Red, /Green y /Blue independientes con respaldos /Gray y /Default obligatorios, mientras que cada pantalla seleccionada puede reemplazar 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 mal formadas, las asignaciones sobredimensionadas, los diccionarios de Tipo 5 anidados o los desajustes de longitud de carga útil dejan el estado completo de pantalla activa en modo de tono continuo

Glifos Tipo 3

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

d0 y d1 proporcionan métricas de glifo mientras que un procedimiento d1 conserva el color seleccionado por quien llama, tal como lo exige el modelo de imágenes del PDF

Los CharProcs repetidos reutilizan las listas de visualización decodificadas y tokenizadas cuando coinciden la fuente, el glifo, la matriz de dispositivo lineal y el estado de color; la traducción permanece dinámica para que los caracteres repetidos en posiciones distintas 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 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 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 áreas antes de dibujarse o guardarse en caché; una imagen grande dibujada pequeña cabe entonces en la caché de decodificación, de modo que un grupo dibujado dos veces o una página repetida la reutilizan, y su máscara suave se aplica píxel por píxel a ese tamaño. Las máscaras de imagen de estarcido 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 de ondículas y la expansión raster

Los codestreams JPEG 2000 direccionables por mosaicos también pueden decodificar un mosaico validado directamente mediante THPDFJpeg2000Decoder.LoadTileFromByteArray, con metadatos de cuadrícula de mosaicos y límites de bytes de salida expuestos por el decodificador

Cuando una región nativa intersecta varios mosaicos independientes, LoadRegionFromByteArrayParallel asigna estado OpenJPEG privado por trabajador y compone los rasters completados en orden determinista de fila mayor; la cancelación, los límites de salida y el presupuesto efectivo de memoria máxima pueden detener la planificación o seleccionar el respaldo secuencial

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

API relacionadas