Column 03

QuickDrawのトランスファーモード(Transfer Mode)

● トランスファーモードとは?
 QuickDrawでは、ある画像データを画面に表示する場合、一度「オフスクリーングラフポート」というバッファに書き込んでから表示します。この時、すでに書き込まれているデータ(デスティネーション)の上に完全に上書きしてしまうだけではなく、色々な論理演算によってバリエーションを作ることができます。これを「トランスファーモード(transfer-mode)」と呼び、各モードに対応する一定の整数値(integer)があります。現在のColor QuickDraw以前からのものや、Colorの拡張によって新たに追加されたものなどもあります。白黒画像の時代からのものは、名前だけでは内容が解りにくい場合もあります。原則的には、カラーの場合はRGB各色について、白黒の場合と同様の演算を行うと考えて良いでしょう。
● トランスファーモード(1)
最初のいくつかのモードは、白黒2値による演算をもとにした名前がついています。ここでは黒の値が(1)、白の値が(0)になっています。これらは、
Copy source(転送される値)をdestination(現在の状態)に上書きします。
Or sourceとdestinationのどちらかが黒(or)であれば黒になります。
Xor 排他的論理和。sourceとdestinationの状態(黒か白か)が同じである時は白(0)、それ以外の時は黒(1)になります。
Bic BitClearの意味。sourceを反転し、destinationが黒である所にだけ書き込みます。
Not‥ 上の4つのモード名の前にNotがつく場合(NotCopy,NotOr,etc)まず、sourceを反転させてから上の演算を行います。

ということを意味しています。これを実際に242.collageを使って実際の画像で確認してみたのが下の図です。左側がモノクロ画像の例、右側が次に説明するカラー画像の例です。

モノクロ画像
カラー画像
0 srcCopy
1 srcOr
2 srcXor
3 srcBic
4 notSrcCopy
5 notSrcOr
6 notSrcXor
7 notSrcBic
これをカラー画像に適応する場合、上のような演算に加えてforeground color (fgcolor), background color (bgcolor)の設定も影響してきます。fgcolorの初期値は黒(RGBの値はすべて$0000)、bgcolorの初期値は白(RGBの値はすべて$FFFF)です。下の説明では、sourceの黒い部分と白い部分に対するfgcolor,bgcolorの影響を説明していますが、それ以外の色の場合、大雑把にいうと、各RGBの値の$FFFFに対する比に応じて、$0000〜$FFFFの上限、下限を各々fgcolorやbgcolorの各RGB値で置き換えた範囲にマップされると考えれば良いようです。言葉で説明してもなかなか感じがつかめないかも知れませんので、上の画像データを作るために使用したサンプルパッチをダウンロード場所に置いておきますので、いろいろ試してごらんになるとよいでしょう。
natoで使われているトランスファーモード(1)
数値 モード 概略
0
srcCopy
source(転送される画像データ)をdestination(現在のピクセル状態)に置き換え(上書きし)ます。
1
srcOr sourceとdesitinationのOr。sourceの黒い部分にはfgcolorが適用され、desitinationを置き換えます。sourceの白い部分は転送されません
2
srcXor sourceとdestinationのXor。(排他的論理和-お互いに異なれば1、同じなら0)
3
srcBic sourceの黒い部分にはbgcolorが適用され、destinationを置き換えます。sourceの白い部分は転送されません。
4
notSrcCopy souceの白い部分にはfgcolorが、黒い部分にbgcolorが適用され、desitinationを置き換えます。
5
notSrcOr sourceを反転したOr。sourceの白い部分にはfgcolorが適用され、desitinationを置き換えます。sourceの黒い部分は転送されません。
6
notSrcXor sourceを反転して、Xorをとります。
7
notSrcBic sourceを反転して、Bicを適用します。sourceの白い部分にはbgcolorが適用され、destinationを置き換えます。sourceの黒い部分は転送されません。
8
patCopy 演算は上の0〜7(src***をpat***に読み替えたもの)と同じです。現在ではsource(ビットマップ、テキスト等)とpattern(QuickDrawのrectangle,line等)の区別は自動的に行われるようです。区別する場合は、上記のような区別になります。
9 patOr
10 patXor
11 patBic
12 notPatCopy
13 notPatOr
14 notPatXor
15 notPatBic
● トランスファーモード(2)
ColorQuickDrawになって新たに追加されたモードです。Inside Macintoshでは"arithmetic mode(演算モード)と呼んでいます。sourceとdesitinationの値を使った演算結果をピクセルの値として書き込みます。49,50はテキスト用モード、256以降はアルファチャンネルを使用する場合に設定します。
natoで使われているトランスファーモード(2)
数値 モード 概略
32 blend
sourceとdestinationの加重平均を計算します。sourceとdestinationの重み付けの割合はopcolorで設定されます。
33 addPin sourceとdestinationの和をとります。rgbの各最大値はopcolorによって決定されます。
34 addOver sourceとdestinationの和をとります。値が0xFFFFを超えると桁上がりは無視されます
35 subPin sourceとdestinationの差をとります。rgbの最小値はopcolorによって決定されます。
36 tranparent sourceとdestinationが異なる場合、sourceを転送します。
37 adMax sourceとdestinationを比較し、各rgb値の大きい方の値をとります。
38 subOver sourceとdestinationの差をとります。値が0を下回ると桁上がりは無視されます。
39 adMin sourceとdestinationを比較し、各rgb値の小さい方の値をとります。
49 graish TextOr テキスト転送モード。グレーの文字を転送します。
50 hilite テキスト転送モード。ハイライト。
64 ditherCopy 他のモード用の定数に加えて使います。ディザ法でビットマップを展開します。
256 straight alpha アルファチャンネル関係のモードです。

/*242.channer等のアルファチャンネルに関する解説の中で扱おうと思います*/

257 pre multiplied with white alpha
258 pre multiplied with black alpha
260 staraight alpha blend

back

download