色の混合

VGA マシンでは,一度にたかだか 256 色しか表示することができません。これらの 256 色はパレットに保持されています。パレット色は 262,144 (256K) 色から選択することができますが,一度に選択できるのは 256 色だけです。一部のディスプレイ・アダプタ (大部分の SVGA) は 256K 色をすべて表示することができます。また,True Color ディスプレイ・アダプタは 256*256*256 = 1670 万色を表示することができます。

パレットを使用する場合,パレットに含まれている色しか使用できません。システムで使用可能な全色を参照するためには,パレット指標ではなく,明示的な RGB 値を指定する必要があります。

色指標を選択するときには,システムの既定のパレット中から,いずれか 1 つの色を指定することになります。SETCOLORSETBKCOLOR,および SETTEXTCOLOR は,現在の色,背景色,およびテキスト色を,いずれかのパレット指標に設定します。

SETCOLORRGBSETBKCOLORRGB,および SETTEXTCOLORRGB は,使用可能な範囲全体から選択した色値に設定します。色値を選択するときには,赤,緑,および青の色値について,それぞれ 0 ~ 255 の範囲で輝度を指定することになります。色値を定義するロング整数は,次のように 3 バイト (24 ビット) から構成されています。

	MSB                    LSB
	BBBBBBBB GGGGGGGG RRRRRRRR

R,G,および B は,赤,緑,および青の輝度のビット値を表しています。色を混合して明るい赤 (ピンク) を作るには,赤のビットをすべてオンにして,そこに緑と青をいくらか混合します。

	10000000 10000000 11111111

16 進表記では,この数値は #8080FF に相当します。次に関数の例を示します。

	i = SETCOLORRGB (#8080FF)

この関数を使うと,現在の色をこの値に設定することができます。

また,この関数には10進値を渡すこともできます。1 (2 進数の 00000001,16 進数の 01) は輝度が小さく,255 (2 進数の 11111111,16 進数の FF) は最高の輝度を表していることに注意してください。純粋な黄色 (100% の赤と 100% の緑の組み合わせ) を作るには,次の行を使用します。

	i = SETCOLORRGB( #00FFFF )

白を作るには,すべての色をオンにします。

	i = SETCOLORRGB( #FFFFFF )

黒を作るには,すべての色を 0 に設定します。

	i = SETCOLORRGB( #000000 )

次表に,いくつかの色の RGB 値を示します。

RGB 値 RGB 値
#000000 明るい白 #FFFFFF
暗い赤 #000080 明るい赤 #0000FF
暗い緑 #008000 明るい緑 #00FF00
暗い黄色 #008080 明るい黄色 #00FFFF
暗い青 #800000 明るい青 #FF0000
暗いマゼンタ #800080 明るいマゼンタ #FF00FF
暗い青緑色 #808000 明るい青緑色 #FFFF00
暗い灰色 #808080 明るい灰色 #C0C0C0

64K 色を表示できるマシンで,64K の既定 RGB 色値のいずれにも対応しない RGB 色値を設定した場合,システムは要求された RGB 色に最も近い,使用可能な RGB 値を選択します。VGA マシンで,パレットにない RGB 色を設定したときも,同じことが行われます。VGA カラー・パレットを異なる RGB 値に再マップすることができます (「VGA カラー・パレット」を参照)。

ただし,グラフィックスが近似色で描画されている場合でも,GETCOLORRGBGETBKCOLORRGB,または GETTEXTCOLORRGB で色を取得したときには,実際に使用されている色ではなく,プログラマが指定した色が返されます。これは,SETCOLORRGB 関数は実際にグラフィックスの描画を行っているのではなく,色を設定しているだけで,近似は描画の際に (ELLIPSEARC などによって) 行われているからです。GETPIXELRGBGETPIXELSRGB は実際に使用されている近似色を返します。これは,SETPIXELRGBSETPIXELSRGB が画面上のピクセルを実際に何らかの色に設定する関数であり,これらが呼び出された時点で,必要ならば近似が行われるからです。