戻る

グラフィックスプログラマになる 04 (2024/05/26)


void OnPaint(HDC hdc)
{
  COLORREF color = RGB(255, 0, 0);
  SetPixel(hdc, 20, 10, color);
  SetPixel(hdc, 21, 10, color);
  SetPixel(hdc, 22, 10, color);
  SetPixel(hdc, 23, 10, color);

  SetPixel(hdc, 20, 11, color);
  SetPixel(hdc, 21, 11, color);
  SetPixel(hdc, 22, 11, color);
  SetPixel(hdc, 23, 11, color);

  SetPixel(hdc, 20, 12, color);
  SetPixel(hdc, 21, 12, color);
  SetPixel(hdc, 22, 12, color);
  SetPixel(hdc, 23, 12, color);

  SetPixel(hdc, 20, 13, color);
  SetPixel(hdc, 21, 13, color);
  SetPixel(hdc, 22, 13, color);
  SetPixel(hdc, 23, 13, color);
}


前回、上記のようなコードを書きました。

「SetPixel」の行が増えたら、描画された点の大きさが大きくなりましたね。Set=セットする、Pixel=ピクセル、ピクセルをセットする……と想像できます。実際、名前の通り「ピクセルを描画する」命令を呼び出しています。

最初は1回の呼び出しだったので1ピクセル、上記のコードでは16回呼び出しているので、16ピクセル (4 * 4 ピクセル) 描画しています。

ここでの「SetPixel」という命令は、何に対して命令しているのでしょう? この命令は、OS (Windows) に対しての命令です。Windows には「Windows API」という、アプリケーションに必要な命令がプログラマに提供されています。例えば、

・PixelSet (ピクセルを描画する命令)
・FillRect (矩形を描画する命令)
・Ellipse (楕円を塗りつぶす命令)

などがあります。が、当面は PixelSet だけ使っていくので他の命令は気にしないでください。

こういった命令は「関数」と呼ばれています。PixelSet関数、FillRect関数。関数の呼び出し方はプログラミング言語によって変わってきますが、ここでは Windows API として提供されている「C言語」の関数について見ていきましょう。

関数とは?

関数は、


関数名()
関数名(パラメータ1)
関数名(パラメータ1,パラメータ2)
関数名(パラメータ1,パラメータ2,パラメータ3)
関数名(パラメータ1,パラメータ2,パラメータ3,パラメータ4)
...


などという形式で呼び出します。上記の PixelSet のコードは、

関数名(パラメータ1,パラメータ2,パラメータ3,パラメータ4)

であり、

SetPixel(hdc, 20, 10, color)

なので、

・関数名は SetPixel
・パラメータ1 が hdc
・パラメータ2 が 20
・パラメータ3 が 10
・パラメータ4 が color

だと分かりますね。

パラメータ(引数)とは?

こういった、関数に渡す値を「パラメータ」や「引数(ひきすう)」と呼びます。パラメータがない関数もあります。

先ほどの SetPixel 関数は、

・パラメータ2 が 20
・パラメータ3 が 10

となっていました。ピクセルを描画するには座標が必要だというのは想像しやすいですね。

SetPixel 関数のパラメータ2は「描画するピクセルのX座標」、パラメータ3は「描画するピクセルのY座標」を表しています。つまり、X座標が20、Y座標が10の位置にピクセルを描画するよう命令しています。

ピクセル描画の座標

Windows API での座標指定は、画像の左からのピクセル数がX座標、画像の上からのピクセル数がY座標になります。数学だと原点から上に向かってY座標が大きくなるので、Y座標が逆になっているのが気になりますね。そういうものだと割り切ってください。