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
- Los valores de
/Matrixde Form XObject se componen con la matriz de transformación actual antes de que se ejecute el contenido del grupo - Los grupos aislados usan un plano alfa separado para que el contenido negro siga distinguiéndose de los píxeles transparentes
- Los grupos de perforación reemplazan la contribución de grupo anterior en las áreas pintadas superpuestas
- El contenido del grupo parte del modo de mezcla Normal: el modo de mezcla, el alfa constante y la máscara suave vigentes en
Dose aplican al grupo en su conjunto - Un grupo pintado con otro modo de mezcla mezcla su propio color y su alfa con el fondo; un grupo no aislado cuyos propios estados de gráficos se mezclan de forma normal se dibuja sobre negro y sobre blanco para recuperar su alfa
- Los grupos se dividen en mosaicos acotados de 768 píxeles mientras que el pintado GDI, la fase de semitonos, los grupos anidados, las máscaras suaves y la composición conservan coordenadas de dispositivo absolutas
- Los bytes del Form se decodifican y tokenizan una vez antes de la ejecución del mosaico, y las máscaras temporales locales del mosaico se liberan antes del siguiente mosaico
- Se admiten grupos anidados con recursión acotada y restauración completa del estado de gráficos después de cada invocación de Form
Máscaras suaves
- Las máscaras
/S /Alphay/S /Luminosityse evalúan a partir del grupo de la máscara - El grupo de la máscara se dibuja con mezcla Normal, sea cual sea el modo de mezcla que lleve el estado de gráficos que establece la máscara
- Las máscaras de luminosidad resuelven el
/CSdel grupo de transparencia y ponderan el color resuelto con la aproximación DeviceGray del PDF, como hacen los visores comunes; establezcaRenderColorimetricLuminosityMaskspara usar en los espacios basados en CIE el CIE Y colorimétrico /BCse valida contra el recuento exacto de componentes del espacio de mezcla y suministra la luminosidad convertida fuera del contenido de máscara pintado- La pintura Separation y DeviceN se convierte mediante su espacio alterno Lab o ICCBased para que los componentes de tinta nunca se filtren a una máscara suave
- Las funciones de transferencia
/TRadmiten funciones muestreadas, exponenciales, de costura y de calculadora PostScript mediante el evaluador de funciones compartido /SMask /Noneborra la máscara activa, yqoQconserva el estado de la máscara con normalidad- Las máscaras compiladas se reutilizan solo cuando el diccionario de origen, la matriz de transformación actual y la intención de renderización coinciden todos
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;