前景混合モードの設定    GLIBW32   (1999.01.14)

 Windows 95/98 のグラフィックスで描く色は、赤(R)、緑(G)、青(B) 
の3つの色を混ぜ合わせることで表示されます。それぞれの3つの色は 
256諧調(0〜255)の輝度で表わされ、その組み合わせは理論上は 

256×256×256=16777216 

の色を表現することができることになります。範囲0〜255からなる3つ 
の輝度を全て0にすると黒になり、すべてを255にすると白になります。 
下の表は、基本的な8色のRGB (赤、 緑、 青) 値を示したものです。 
0 0 0
0 0 255
0 255 0
水色 0 255 255
255 0 0
255 0 255
黄色 255 255 0
255 255 255

0〜255の整数値は、8ビットのデータ(256=2の8乗)として表現 
できますから、8×3=24ビットで色を管理できます。 
 実際は Windows 95/98 では、32ビットからなる COLORREF値 で指定さ
れていて、下から赤、緑、青のデータが8ビットずつ納められ、残りの上位
8ビットには0が入ったものになっています。 

 さて、色の混合を考えます。グラフィックス画面に図形を描く際に、背景 
の色に図形の色を上書きして色を描くのではなくて、2つの色を混ぜ合わせ 
て描くことを考えます。丁度、光のような発光体のように、3原色を混ぜ合 
わせて新しい色を作ります。 

 色を混合するには、描画する色と背景の色データに対して演算を行うこと 
で混ぜ合わせる色を決めます。これは、色のデータの各ビット(0か1か) 
に対して論理演算を行います。この演算を2元ラスタオペレーション・コー
ドといいます。 

Glibw32でサポートする演算は論理積(AND)、論理和(OR)と排他的 
論理和(XOR)の3つです。他にNOT演算もありますがこれは、グラフ 
ィックス画面の初期化のときに背景色を黒か白に選ぶことで代用できます。 

 描画モードの設定は、GRAPHクラスのメンバー関数 setrop で行えます。
サンプルとして、光の3原色の混合を示します。 

光の3原色の混合ソースファイル setrop01.cpp) 赤、緑、青の3原色から黄色、水色、紫、白の4色をつくります。これは色の 演算を論理和(OR)つまり色の足し算で行った結果です。   ビット論理演算の解説はこちら ビット論理OR演算では、2つのビットで少なくとも片方が1なら結果は1で、 両方のビットが0のとき結果は0となります。色データの値0は8ビットの2 進数では 00000000 で、255は 11111111 という8つのビット並びですか ら。例えば、赤と青の演算では 赤 緑 青 赤 --> 11111111 00000000 00000000 青 --> 00000000 00000000 11111111 --------------------------------- OR演算 11111111 00000000 11111111 -------------------------------- つまり 255 0 255 従って(R,G,B)=(255,0,255)は紫です。  次の例は、黒、青、緑、水色、赤、紫、黄色、白の8色の並びの帯を縦と横 にならべてその重なり(混合)を見ます。下に示すのは排他的論理和(XOR) で混合モードを設定したものです。

排他的論理和(XOR)ソースファイル setrop04.cpp) 左端の下から上への並び、及び下端の左から右への並びが元の8色 黒->青->緑->水色->赤->紫->黄色->白 の帯です。  XOR演算は、片方だけが1のときのみ結果が1となります。つまり同 じビット値同士の演算(0と0、1と1)は0です。ここで、反対角線が 黒になるのは、この様なXORの特徴で、同じ色を重ね書きするとその色 が消される(元の背景色黒になる)ためです。

Glibw32 のページへ戻る
 

Copyright(c) 1998,1999 Yamada, K