戻る
グラフィックスプログラマになる 05 (2024/06/11)
色を渡す
「ピクセルを描画する」命令を見てみましょう。
COLORREF color = RGB(255, 0, 0);
SetPixel(hdc, 20, 10,
color);
SetPixel関数の、4つ目のパラメーター(引数)に、color というものを与えています。その前の行に、
COLORREF color = RGB(255, 0, 0); がありますね。
色を指定する時に、ペイントツールだったら
RGB値を指定すると思います。プログラミングでも同じで、赤と緑と青(光の三原色、というやつですね)の値を、0から255の範囲で指定します。
だったら、
SetPixel(hdc, 20, 10,
255, 255, 255 );
という具合に (
R=255, G=255, B=255 なので白)、R,G,B値を別々に渡せば良いのでは……と思いますよね。プログラミングにおいて「関数の引数は少ないほど速く処理できる」という都合があるので、「RGBまとめた色」として一度に渡せるなら、それに越したことはないという事でしょう。
というわけで、R,G,B 個別に渡すことが出来ないので「色」という「型」を用意してやり、その色(ここでは color) を渡すようになっています。
……ん? 型?
「型」と「変数」
ここで「型」というものが出てきました。
C言語、では、どんな値を表現したいのか、厳密に定義する必要があります。数値で表せるものだけも、「整数」「小数」「XY座標」「色(RGB)」「色 (RGB+不透明度)」など、多彩です。「整数」だって、「0~255」までしか表せない整数と、「0~65535」まで表せる整数では違います。
この「どんな値を表すか」というのが「型」と呼ばれるものです。
COLORREF color = RGB(255, 0, 0);
でしたら、
COLORREF color = RGB(255, 0, 0);
が、型を指定しているところです。
COLORREF型です。
「COLORREF」型の「color」変数を用意して、「RGB(255, 0, 0)」で作られた値が「color」にセットされるわけです。……いやいや、変数って何ですか? いきなり言われても理解できるわけがないですよね。もっと簡単なところから「変数」を練習してみましょう。
座標を「変数」で渡してみよう
SetPixel(hdc, 20, 10, color);
を見てみましょう。20はX座標、10はY座標でしたね。数字を直接渡していたので、分かりやすい。ここを「数字」でなく「変数」として渡してみましょう。
SetPixel(hdc, 20, 10, color);
は、
int x = 20;
int y = 10;
SetPixel(hdc, x, y, color);
とも書く事ができます。
1行目は、「int(整数)」型の、xと名付けられた変数(データ)に、20という数字をセットする。
2行目は、「int(整数)」型の、yと名付けられた変数(データ)に、10という数字をセットする。
そして、SetPixel関数に、20の代わりにxを、10の代わりにyを渡している。xの中身は20、yの中身は10なので、やっている事は同じです。
int a = 20;
int b = 10;
SetPixel(hdc, a, b, color);
と、xとyの代わりに、aとbにしても構いません。自由な名前を使いましょう。C言語なら、半角英語の大文字と小文字、アンダーバーが変数名として使えます。
変数の内容は、後から差し替える事ができるので、
int x = 0;
int y = 0;
x = 20;
y = 10;
SetPixel(hdc, x, y, color);
と、最初に0で初期化した後に 20と10をセットしても(xの中身を20に差し替え、yの中身を10に差し替えても)、SetPixelに渡される値は同じなので、描画されるピクセルは同じになります。
int x;
int y;
x = 20;
y = 10;
SetPixel(hdc, x, y, color);
と、xとyの変数だけを用意だけして(0で初期化しないで)、後から20と10をセットすることもできます。
ちょっと長くなってしまったので、続きは次回に。
(次回へ続く)