F-1 RGB

犬や牛は色が見分けられませんが、人間は色を見分けることが出来ます。逆に、人間は紫外線を見ることが出来ませんが、蝶は紫外線を見ることが出来ると言われています。

このような違いは、各動物の視神経の違いから来ています。人間の目には赤 (R)・緑 (G)・青 (B) の3種類の視神経 (錐体) があり (実際にはこの他に桿体というものもあるが、この視神経は色を識別できない)、この3種類の視神経が反応する比率によって様々な色を感じています。

そのため、赤・緑・青の3つの光を適切に混ぜ合わせることにより、人間が知覚するあらゆる色を (原理的には) 表現することが可能になります。CRT (テレビやモニタのブラウン管) も、近づいてよく見ると赤・緑・青の3種類の点が交互に並んでいることが分かります。

MS-Windows では、基本的に赤・緑・青の3つの光の強さを 0〜255 の256段階で扱っています。つまり、256*256*256 = 16777216色 の色を扱っています(ビデオカードの性能によりこれより少ないこともあります)。

【練習問題】

7-2節で学習した通り、コンピュータでは、色も数値で表現しています。ここでそれを確認しておきましょう。
スピンエディットに適当な数を十進数で入力して「色の表示」ボタンを押すと
その数に対応した色が左のパネルに表示される、というプログラムを作ります。

次のようなフォームを用意して下さい。

コンポーネント Name プロパティ
フォーム FormCustomColor
左のパネル PanelDisplay
「色の表示」ボタン ButtonDisplay
スピンエディット SpinEditColor

「ファイル」→「名前を付けて保存」で、このユニットを customcolor.pas という名前で保存して下さい。

ボタンのイベントハンドラは次のようにします。

// 「色の表示」ボタン
procedure TFormCustomColor.ButtonDisplayClick(Sender: TObject);
begin
  PanelDisplay.Color := SpinEditColor.Value;
end;

これを見て分かるように、このプログラムはスピンエディットの値をパネルの色に設定します。下の空欄を埋めて下さい。

【基礎課題 F-1】

次のようにフォームに3つのスピンエディットを加え、赤・緑・青の色の度合いをそれぞれ別個に指定できるようにしましょう。

「色の表示」ボタンのイベントハンドラにも修正を加える (追加する) 必要があります。次の下線部を埋めて下さい。

// 「色の表示」ボタン
procedure TFormCustomColor.ButtonDisplayClick(Sender: TObject);
begin
  SpinEditColor.Value :=                    *           // 色の代入
                            +                  * 256
                         +                 ;
  PanelDisplay.Color := SpinEditColor.Value;
end;

ここまでのプログラムをダウンロード(D)

【応用課題 F-1】

スクロールバーというコンポーネントを用いて、

このスクロールバーを左右にずらすと
即座にパネルの色が変わる、というプログラムを作りましょう。

まずは、次のようにフォームにスクロールバーを3つ加えて下さい。

コンポーネント Name プロパティ
「赤」スクロールバー ScrollBarR
「緑」スクロールバー ScrollBarG
「青」スクロールバー ScrollBarB

スクロールボックス (左右に動くつまみ) の位置は、Position というプロパティに入っています。ただし、初期設定では右端の位置が 100 になっている (Max プロパティが 100 である) ので、0〜255 の値をとるように Max プロパティを 255 にしておきましょう。

「赤」スクロールバー (を移動させたときに発生するイベント) のイベントハンドラは次のようになります。下線部を埋めて下さい。

// 「赤」スクロールバー
procedure TFormCustomColor.ScrollBarRChange(Sender: TObject);
begin
  SpinEditR.Value :=                         ;
                          (Sender);
end;

また、他のイベントハンドラも作って下さい。