VGA マシンでは,一度にたかだか 256 色しか表示することができません。これらの 256 色はパレットに保持されています。パレット色は 262,144 (256K) 色から選択することができますが,一度に選択できるのは 256 色だけです。一部のディスプレイ・アダプタ (大部分の SVGA) は 256K 色をすべて表示することができます。また,True Color ディスプレイ・アダプタは 256*256*256 = 1670 万色を表示することができます。
パレットを使用する場合,パレットに含まれている色しか使用できません。システムで使用可能な全色を参照するためには,パレット指標ではなく,明示的な RGB 値を指定する必要があります。
色指標を選択するときには,システムの既定のパレット中から,いずれか 1 つの色を指定することになります。SETCOLOR,SETBKCOLOR,および SETTEXTCOLOR は,現在の色,背景色,およびテキスト色を,いずれかのパレット指標に設定します。
SETCOLORRGB,SETBKCOLORRGB,および 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 カラー・パレット」を参照)。
ただし,グラフィックスが近似色で描画されている場合でも,GETCOLORRGB,GETBKCOLORRGB,または GETTEXTCOLORRGB で色を取得したときには,実際に使用されている色ではなく,プログラマが指定した色が返されます。これは,SETCOLORRGB 関数は実際にグラフィックスの描画を行っているのではなく,色を設定しているだけで,近似は描画の際に (ELLIPSE や ARC などによって) 行われているからです。GETPIXELRGB と GETPIXELSRGB は実際に使用されている近似色を返します。これは,SETPIXELRGB と SETPIXELSRGB が画面上のピクセルを実際に何らかの色に設定する関数であり,これらが呼び出された時点で,必要ならば近似が行われるからです。