2017-05-09 14 views
1

グラフィックスの状態とデバイスとちょっと混乱しています。PostScript(ページ)のデバイスの質問

PLRMページ679:

有効な場合は 現在のページデバイスのために、これらの要求された値は、現在のページ デバイスの辞書にsetpagedeviceでマージされます。これらのパラメータの解釈は、6.2節で「ページデバイス・パラメータの。」で説明されて

私はこれを読めば、私は、グラフィックス状態が現在のページデバイスの辞書を維持していることを理解しています。 私が辞書を変更できるものであり、現在のページのデバイスはデバイスからのデフォルト値を持つ読み取り専用「オブジェクト」であると仮定も「現在のページデバイス

を保持するように見えますか?複数のデバイスがあることを知っているマニュアル読み取ることにより

  • pagedevice
  • cachedevice
  • nulldevice
  • を...

しかしgraphicsstateはいるようですページャについてのみ気にします。これは正しいです? 設定時にcachedeviceとnulldeviceはどこに保存されますか?

私がIdePSを試してみたら、ghostscriptは状態dictにcurrentpagedeviceしか持っていないのがわかります。 "nulldevice"を実行するとき、現在のデバイスはまだそこにあります。 enter image description here

この「現在のページデバイス」(辞書ではありません)については、これもグラフィックステートに保存されますか?

答えて

2

現在のページデバイスは、メディアにマークを付けるデバイスです.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プログラムが(現在の舞台裏で)単純に現在のページデバイスを実行し、辞書の内容を読むことを提案します。左側には内容があり、右側には内容があることに注意してください。

「状態」はインタープリタの特定の実装を指しているとは考えていません。

+0

"ページデバイス辞書は、グラフィックス状態の一部として維持されず、デバイスによって維持されます。 私のスクリーンショットを見ると、 "currentpagedevice"はグラフィックステートのdicttypeです。それはグラフィックス状態の一部ですが、グラフィックス状態の一部として維持されておらず、別のオブジェクトであると言います。もう少し明確にすることはできますか? nulldevice、cachedevice、およびdisplaydeviceがすべて「ページデバイス」であることを正しく理解していますか?そして、ヌルデバイスは空のページデバイス辞書を備えたページデバイスにすぎませんか? – juFo