高度なレンダリングセマンティクス

ロード済みページのレンダリングは、透過グループ、ソフトマスク、Type 3 グリフプロシージャ、解像度対応の可視画像領域デコードを適用しながら、入れ子になった Form XObject 状態を保持します

破線ストローク

ネイティブのパス描画は、奇数長の配列、小数の長さ、round / square キャップ付きのゼロ長破線セグメントを含め、破線配列とその位相を完全に保持します。破線パターンはサブパスごとに再開されます

単色ストロークとグラデーションパターンのストローククリップは 1 つの境界付き破線ジオメトリパスを共有し、連続して描画される区間内のジョインを保持したまま、閉じた輪郭の始点をまたいで描画区間同士を結合します

破線の長さにはレンダラーの現在の変換の平均スケールが反映され、曲線分割にはデバイス空間への適応型フラット化が使われます。塗りと保留中のクリッピングでは、分割前の元のパスがそのまま使われます

透過グループ

ソフトマスク

トランスファー関数とサンプリング関数

/TR2 は /TR よりも優先され、単一の関数がすべての RGB 出力チャネルに適用され、4 関数配列は最初の 3 つを個別に適用しながら /Identity と /Default エントリを保持します

新しいトランスファー状態を適用するとすべてのチャネルが原子的に置き換えられるため、Identity エントリが以前のグラフィックス状態からルックアップ値を継承することはありません

Type 0 サンプリング関数は、1〜4 の入力および出力次元、/BitsPerSample 値 1、2、4、8、12、16、24、32、反転または順方向の /Encode マッピング、独立した /Decode 範囲、多重線形補間、多次元三次補間、1 次元 /Order 3 データに対する自然三次スプラインをサポートします

デコード済みサンプルバイト、検証済み次元、マッピング、三次導関数は、レンダリングスレッドごとに 64 MiB に制限された 8 エントリの LRU を共有し、過大または不正な関数はアクティブなトランスファールックアップテーブルを部分的に置き換えることなく失敗します

ハーフトーンスクリーン

Type 6、Type 10、Type 16 のしきい値配列は、正確なデコード済み長さ、ビッグエンディアン 16 ビットしきい値、加算色成分比較、角度付きまたは 2 長方形スクリーンを拡張しないコンパクトな周期ストリップを用いて直接実行されます

Type 5 辞書は、/Gray と必須の /Default フォールバックを備えた独立した /Red、/Green、/Blue スクリーンを選択し、選択された各スクリーンはグローバルトランスファー関数を上書きできます

検証済みのしきい値バイトとその正規化ジオメトリは、レンダラーごとに 64 MiB に制限された 64 エントリの LRU を共有し、不正な次元、過大な割り当て、入れ子の Type 5 辞書、またはペイロード長の不一致は、アクティブなスクリーン状態全体を連続トーンモードのまま残します

Type 3 グリフ

Type 3 CharProcs は、フォント辞書の現在のリソーススコープ、Form サポート、クリッピング、画像、パターン、境界付き再帰を備えた完全なコンテンツオペレータエンジンを通じて実行されます

d0 と d1 はグリフメトリクスを提供し、d1 プロシージャは PDF イメージングモデルが要求するように呼び出し元で選択した色を保持します

反復される CharProcs は、フォント、グリフ、線形デバイスマトリックス、色状態が一致する場合に、デコード済みでトークン化された表示リストを再利用します。平行移動は動的なままなので、異なる位置での反復文字は 1 つのエントリを共有します

レンダラーごとの LRU は最大 256 エントリと 131,072 トークンを保持し、16,384 トークンを超える CharProc をバイパスし、GetLastType3GlyphCacheStats を通じて動作を報告します

クリップおよびダウンスケールされた画像領域

軸平行画像 XObject は、可視ソース境界のみを要求し、可視デバイスピクセルサイズをデコードパスに渡します

ソフトマスク付きの画像は、描画されるサイズで全体がデコードされ、マスクも同じサイズでデコードされます。そのため、クリップが描画範囲を制限する間も、マスクは画像と整列を保ちます。JPEG マスクは縮小サイズ DCT デコーダーを使います

レンダリング時には、描画サイズの両方向で 2 倍以上にデコードされたリージョンは、描画やキャッシュの前に面積平均で描画サイズちょうどに縮小されます。これにより、小さく描画される大きな画像もデコードキャッシュに収まり、2 回描画されるグループや繰り返されるページでそれを再利用でき、ソフトマスクもそのサイズでピクセル単位に適用されます。ステンシルイメージマスクは完全な解像度を保ち、公開されているリージョンデコードメソッドはドキュメントどおりのサイズを返します

JPEG 2000 は、デコーダのネイティブ領域 API と、ターゲット寸法の両方を満たすように選択された 2 のべき乗の解像度レベルを組み合わせてから、ウェーブレット再構成とラスタ拡張を行います

タイルアドレス可能な JPEG 2000 コーデックストリームは、THPDFJpeg2000Decoder.LoadTileFromByteArray を通じて 1 つの検証済みタイルを直接デコードすることもでき、タイルグリッドメタデータと出力バイト制限はデコーダによって公開されます

ネイティブ領域が複数の独立タイルに交差する場合、LoadRegionFromByteArrayParallel はワーカーごとにプライベート OpenJPEG 状態を割り当て、決定的な行優先順で完了したラスタを合成します。キャンセル、出力制限、有効ピークメモリ予算により、スケジューリングを停止するか、逐次フォールバックを選択できます

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

関連 API