現在のページデバイスは、メディアにマークを付けるデバイスです.Ghostscriptの-sDEVICE
パラメータは、初期ページデバイスです。
他にも多くのデバイスがありますが、最も明白なのはnulldevice
です。これは単純にビットバケットです。 nulldevice
を実行すると、グラフィックス状態の現在のページデバイスがヌルデバイスに置き換えられます。明らかに通常gsave
/grestore
ペアの内部でこれを行うので、grestore
元のデバイスに戻すことができます!
同様に、グリフをキャッシュにレンダリングしている間、そのノーマルはキャッシュデバイスをプッシュして現在のページデバイスにします。再度これは暗黙の保存/復元で行われ、通常のページデバイスに戻ることができます。これは、レンダリングされたグリフを表すビットマップを取得してキャッシュするためです。
これらは、I/Oデバイスなどの他のデバイスと区別するためにページデバイスと呼ばれます。
各ページデバイスには、キーと値を含むページデバイス辞書(空の場合もあります)があります。 currentpagedevice
を実行すると、デバイスの現在の設定を辞書として取得できます。キー/値のペアを含むディクショナリを作成し、setpagedevice
を使用してデバイスに要求を送信することによって、デバイスの動作を変更できます。デバイスは要求を無視することがあり、そうでない場合、現在のページをリセットすることに注意してください。
だから私は期待:
currentpagedevice {exch == ==} forall
nulldevice
currentpagedevice {exch == ==} forall
異なる結果を得ました。
注記 ページデバイス辞書はグラフィックス状態の一部として維持されず、デバイスによって管理されます。
グラフィックス状態にあるものはデバイスそのものです。これは一般に、何もできない種類の不透明なオブジェクトです。
「私がIdePSを試してみたら、ghostscriptには状態dictのcurrentpagedeviceしかありません。「nulldevice」を実行すると、現在のページデバイスはまだそこにあります。
currentpagdevice
は、現在のページデバイスに属するページデバイス辞書を返す演算子です。だから、あなたは "状態dictにcurrentpagedevice"を持つことはできません。 currentpagedevice
はその演算子であるため常に存在します。
上記のコードを実行すると、元のページデバイスには多くのエントリを持つ辞書がありますが、nullデバイスには空のページデバイス辞書があることがわかります。
[編集]
まあ、Ghostscriptのでその辞書のこと、その真、それが原因でGhostscriptがsetpagedeviceを実装して奇妙な方法で(少なくとも部分的に)です。 FWIW Distillerは辞書としても実装していますが、少なくとも1つのインタプリタは知っていません.Cの構造で保持されているエントリから新しい辞書を作成し、currentpagedeviceが実行されるとその辞書を返します。私はこれがPostScriptの質問であり、特定のGhostscriptに関する質問ではないという印象を受けました:-)
辞書として実装する場合、デバイスによって管理されている辞書が同期されていることを確認する必要がありますグラフィックス状態のディクショナリ、または現在のページデバイスから辞書を返すために使用するその他の手段。もちろん、これらは同じ辞書であっても問題ありません。
私はあなたのプログラムがどのように動作しているのか分かりません。グラフィックスの状態は不透明なオブジェクトであり、質問することはできません。私の推測では、プログラムは「国家」の独自の記録を維持しているということです。その記録は、通訳者の内部状態とは関係ありません。私はあなたが 'state'の下にリストされているものは、Ghostscriptによって内部的に維持されているグラフィックス状態の内容にも近くないという事実を伝えることができます。
私は、IdePSプログラムが(現在の舞台裏で)単純に現在のページデバイスを実行し、辞書の内容を読むことを提案します。左側には内容があり、右側には内容があることに注意してください。
「状態」はインタープリタの特定の実装を指しているとは考えていません。
"ページデバイス辞書は、グラフィックス状態の一部として維持されず、デバイスによって維持されます。 私のスクリーンショットを見ると、 "currentpagedevice"はグラフィックステートのdicttypeです。それはグラフィックス状態の一部ですが、グラフィックス状態の一部として維持されておらず、別のオブジェクトであると言います。もう少し明確にすることはできますか? nulldevice、cachedevice、およびdisplaydeviceがすべて「ページデバイス」であることを正しく理解していますか?そして、ヌルデバイスは空のページデバイス辞書を備えたページデバイスにすぎませんか? – juFo