高级渲染语义

已加载页面渲染在应用透明度组、软蒙版、Type 3 字形程序和分辨率感知的可见图像区域解码时,保留嵌套 Form XObject 状态

虚线路径描边

原生路径渲染保留完整的虚线数组及其相位,包括奇数长度数组、小数长度,以及用圆头或方头线帽绘制的零长度虚线;虚线图案在每个子路径重新开始

纯色描边和渐变图案描边裁剪共享同一条有界虚线几何路径,在连续绘制区段内部保留连接,并在闭合轮廓起点处把各绘制区段连接起来

虚线长度沿用渲染器当前变换的平均缩放,曲线拆分则采用自适应的设备空间打平;填充绘制和待应用的裁剪继续使用未拆分的原始路径

透明度组

软蒙版

传递与采样函数

/TR2 优先于 /TR,单个函数应用于每个 RGB 输出通道,四函数数组独立应用其前三个条目,同时保留 /Identity 和 /Default 条目

应用新的传递状态会原子地替换每个通道,因此恒等条目不能从较早的图形状态继承查找值

Type 0 采样函数支持一到四个输入和输出维度、/BitsPerSample 值 1、2、4、8、12、16、24 和 32、反向或正向 /Encode 映射、独立的 /Decode 范围、多线性插值、多维三次插值,以及一维 /Order 3 数据的自然三次样条

解码后的采样字节、验证后的维度、映射和三次导数共享每个渲染线程上限为 64 MiB 的八条目 LRU,而过大或格式错误的函数会失败,而不会部分替换活动的传递查找表

半色调屏

Type 6、Type 10 和 Type 16 阈值数组直接执行,具有精确的解码长度、大端 16 位阈值、加性分量比较,以及避免扩展倾斜或双矩形屏的紧凑周期条带

Type 5 字典选择独立的 /Red、/Green 和 /Blue 屏,带 /Gray 和必需的 /Default 回退,而每个选定的屏可以覆盖全局传递函数

验证后的阈值字节及其规范化几何共享每个渲染器上限为 64 MiB 的 64 条目 LRU,而格式错误的维度、过大的分配、嵌套 Type 5 字典或负载长度不匹配会使完整活动屏状态保持连续色调模式

Type 3 字形

Type 3 CharProcs 通过完整的操作符引擎运行,带字体字典的当前资源范围、Form 支持、裁剪、图像、图案和有界递归

d0 和 d1 提供字形度量,而 d1 过程按 PDF 成像模型的要求保留调用方选择的颜色

当字体、字形、线性设备矩阵和颜色状态匹配时,重复的 CharProcs 复用解码并标记化的显示列表;平移保持动态,因此不同位置的重复字符共享一个条目

每渲染器 LRU 最多保留 256 个条目和 131,072 个令牌,跳过任何超过 16,384 个令牌的 CharProc,并通过 GetLastType3GlyphCacheStats 报告其行为

裁剪和缩小图像区域

轴对齐的图像 XObject 只请求可见源边界,并将可见设备像素尺寸传入解码路径

带软蒙版的图像按其绘制尺寸整体解码,蒙版也按相同尺寸解码,因此在裁剪限制绘制范围的同时,蒙版与图像保持对齐;JPEG 蒙版使用缩小尺寸的 DCT 解码器

渲染时,双向都至少是绘制尺寸两倍的已解码区域,会在绘制或缓存前用面积平均恰好缩到绘制尺寸;这样被画小的大图能装进解码缓存,画两次的组或重复的页面可以复用它,软蒙版也在该尺寸上逐像素应用。Stencil 图像蒙版保持全分辨率,公开的区域解码方法返回其文档所述尺寸

JPEG 2000 将解码器的原生区域 API 与 2 的幂分辨率级别结合,在波前重建和光栅扩展前同时满足两个目标尺寸

可平铺寻址的 JPEG 2000 码流还可以通过 THPDFJpeg2000Decoder.LoadTileFromByteArray 直接解码一个验证后的平铺,解码器暴露平铺网格元数据和输出字节限制

当原生区域与多个独立平铺相交时,LoadRegionFromByteArrayParallel 为每个工作线程分配私有 OpenJPEG 状态,并以确定性的行主序合成完成的栅格;取消、输出限制和有效的峰值内存预算可以停止调度或选择顺序回退

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

相关 API