Solaris X Window System 開発ガイド

印刷用イメージの取り出し

グラフィカルイメージが X ウィンドウに描画されると、ユーザーはウィンドウの表示内容を取り出してプリンタに送信し、ハードコピーを取ることができます。そのための最も一般的な方法は、画面のダンプを実行することです。すなわち、XGetImage を使用してウィンドウピクセルを読み取り、そのイメージをプリンタに送信します。印刷ページのサイズにイメージを合わせるために、イメージの拡大・縮小が必要になる場合もあります。このため、イメージ内にピクセル単位の拡大・縮小によるがたつきが生じることがあります。

X11 の利用者の間で一般的になりつつあるもう一つの方法は、特殊なプリンタグラフィックス API を通じてグラフィックスを再描画することです。この API は標準の Xlib グラフィックスコールをサポートし、これらの関数呼び出しをページ記述言語 (PDL) 形式に変換して適切なプリントスプーラに送信します。この方法の利点は、走査変換が適用された後のピクセルではなく座標自身を拡大・縮小することによって、グラフィックスを印刷ページに合わせられることです。したがって、イメージのがたつきが最小限に抑えられます。

ただし、プリンタ API を使用する方法は、オーバーレイ/アンダーレイウィンドウのペアに適用するときには重大な障害があります。大部分の PDL では、不透明なペイントの概念だけがサポートされ、透明なペイントはサポートされません。たとえば PostScript PDL の場合、以前に出力されたピクセルは新たに出力されたピクセルによって常に置き換えられます。このような制限があるため、プリンタ API を使用する方法では、オーバーレイ/アンダーレイウィンドウの組み合わせ中のイメージを完全に取り出せるとは限りません。特に、オーバーレイの背景が完全に透明で、不透明なペイントだけがそれに描画されるような特殊なアプリケーションでは、アンダーレイが最初に出力された後、オーバーレイが 出力されます。ただし、透明なペイントがオーバーレイに描画されて、そのオーバーレイ内の他の不透明なペイントが消去されると、上記の仕組みはうまく動作しません。

このような問題が解決されるまでは、XReadScreen と拡大・縮小処理を使用して、オーバーレイウィンドウ内のイメージの取り出しとプリンタへの送信を行ってください。あるいは、プリントする予定の情報を描画するときは、オーバーレイを使用しないでください。