Technote 1114
LaserWriter 8.5.1 Additional CopyBits Support: Transparent and Clipped Images
目次
透明描画モード
maskRgnのクリッピング
制限
要約
|
ビットマップイメージをGrafPort間でコピーするためのQuickDraw APIの中でも、もっとも柔軟性のある関数はCopyBitsです。CopyBitsはオフスクリーン画像の画面上へのコピー、PixMapの色の変換、画像の大きさの変換など、多彩な機能を持っているため、多くのデベロッパに利用されてきました。しかし、LaserWriter 8.4.x以前のPostScriptプリンタドライバはCopyBitsのすべての機能に対応していませんでした。このテックノートはLaserWriter 8.5.1が新たに対応しているCopyBitsの機能について解説し、デベロッパやユーザが今後CopyBitsの機能を利用するにあたってアドバイスします。 |
透明な画像を印刷する際に、多くのデベロッパはmodeパラメータにtransparentを指定しようとします。しかし、今までのLaserWriterドライバはこのモードをサポートしていませんでした。transparentを指定してもsrcCopyと見なされてしまいます。また、今までのLaserWriterドライバはmaskRgnパラメータもサポートしていませんでした。LaserWriter 8.5.1ではこれらの機能がすべてサポートされるようになりました。
透明描画モード
今までのLaserWriterがサポートしなかった描画モードの内の1つはtransparent(透明)モードでした。これは色数が1ビット以上のビットマップを描画する際に、ソースイメージの特定の色を「透明」と指定すると、その色のピクセルだけが描画されないモードです。透明となる色はQuickDrawの背景色です。このモードの利点は、色数が1ビット以上のビットマップを描画する際にQuickDrawの背景色で穴を持たせて、必要なところだけを簡単に描画できます。今までのLaserWriterドライバはtransparentモードをsrcCopyと見なしてイメージ全体を無条件に描画しますが、LaserWriter 8.5.1はtransparentモードを画面上と同じように扱います。
maskRgnのクリッピング
CopyBitsでサポートされていなかった機能は他にmaskRgnがあります。CopyBitsにmaskRgnを指定すると、描画の範囲をregionで指定することができます。今までのLaserWriterドライバは単純にmaskRgnを無視していましたが、LaserWriter 8.5.1はmaskRgnをサポートします。
注:
LaserWriter 8.5.1はCopyBitsに渡されるmaskRgnに対応をしていますが、GrafPortのクリップについては特別な処理が行われません。GrafPortのクリップには依然としてclipRgnのrgnBBoxが使われます。これはCopyBitsだけではなく、線や文字を描画する場合でもそうです。アップルコンピュータはLaserWriterドライバにおいてclipRgnにもっと汎用的に対応することを検討してきましたが、互換性などの理由から、仕様は現在変わっていません。
|
制限
新たにサポートされたCopyBitsの機能にはいくつかの制限がありますので、以下に紹介します。
非常に複雑なクリッピングregionはレベル1やレベル2のプリンタデバイスで使用可能なメモリが少なくなっていると使えないことがあります。この場合、maskRgnは無視されます。
具体的にはレベル1のPostScriptプリンタはメモリ容量に関わらず、扱えるクリップの複雑さに制限があります。クリップの複雑さがこの限度を超えるとmaskRgnは無視されます。レベル2のプリンタはメモリ容量だけが制限なので、柔軟に複雑なクリップを扱えます。しかし、レベル2のプリンタもメモリが少なくなってくると、maskRgnが使われない可能性があります。レベル3のプリンタではすべてのクリップ指定が正しく扱われるはずです。レベル3のプリンタではクリップregionはイメージマスクとして処理されます。
LaserWriterドライバはtransparentモードをクリップに変換して処理します。従って上記の制限と同様、複雑な透明範囲はレベル1やレベル2のデバイスで使用可能なメモリが少なくなっていると正しく処理されないことがあります。この場合、透明範囲は無視されて、背景色で描画されます。
LaserWriter 8.5.1ドライバはカラーテーブル(CLUT)を持つ2、4、8ビットイメージについて、1色のみを背景色にマッピングします。CLUTは理論的に背景色と同色のインデックスをいくつも持つことが可能です。しかし、プリンタドライバはカラーテーブル内で背景色と同色の1つ目のインデックスのみを透明と見なします。他のインデックスは背景色のまま出力されます。
現在出荷されているアプリケーションとの互換性を保つため、LaserWriter 8.5.1ドライバは一定の条件が満たされると、空のmaskRgnを無視します(回転テキストや回転画像出力時など)。一部のアプリケーションでは、QuickDrawプリンタに不必要なデータを印刷しない方法として、LaserWriterドライバがmaskRgnを無視していたことを利用しています。このような方法を取るのは推奨しません。また、LaserWriterドライバの次期バージョンではこのような互換性への配慮は継続されない可能性があります。本当に空のmaskRgnを指定する場合はCopyBits自体を呼ばないか、GrafPortのクリップを指定して下さい。
要約
LaserWriter 8.5.1の新しいイメージングコードはCopyBitsの利用範囲を広げました。ぜひ開発中のアプリケーションをLaserWriter 8.5.1とPostScriptデバイスでお試し下さい。
参考文献
更新日: 1997 年 11 月 13 日
|