戻る

グラフィックスプログラマになる 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をセットすることもできます。

ちょっと長くなってしまったので、続きは次回に。