C言語でグラフィックス | ||
【5】ビットマップ画像 |
標準的な画像ファイルの形式であるビットマップファイル(bmp)をGWウィンドウに描画する方法を学習する。
(1)ビットマップの描画
◆サンプルプログラム 〔bitmap11.c〕
GWウィンドウに描画するため、Windows付属のペイントブラシなどでビットマップファイルを作成する。画像のサイズは幅、高さともに50ピクセルとする。
作成例 | ファイル名 fig1.bmp |
ビットマップのファイル名は「fig1.bmp」とし、プログラムファイルと同じフォルダに保存しておく。
#include <GrWin.h> int main(void) { int width = 640, height = 400; GWopen(0); GWsize(-5, &width, &height); GWsize(-3, NULL, NULL); GWvport(0.0, 0.0, (float)width / (float)height, 1.0); GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0); /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ GWclear(-1); GWloadbmp(1, "fig1.bmp"); /* ビットマップファイル読み込み */ GWsetbmp(1, 50.0, 50.0, 1, 1, 0); /* ビットマップファイル設定 */ GWputbmp(1, 100.0, 100.0, 7); /* ビットマップファイル描画 */ /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ GWquit(); return 0; }
int GWloadbmp(int ビットマップ番号, char *ファイル名); |
int GWsetbmp(int ビットマップ番号, float 幅, float 高さ, int 混合モード, int 透明モード, int 基準点); |
0 … 中央 (デフォルト) | 1 … 左下 | 2 … 右下 |
3 … 右上 | 4 … 左上 | 5 … 左 |
6 … 下 | 7 … 右 | 8 … 上 |
int GWputbmp(int ビットマップ番号, float X, float Y, int 描画フラグ); |
実行すると、座標(100, 100)の位置にビットマップ画像が描画される。基準点を0=中央としているので、ビットマップ画像の中央が座標(100, 100)である。
サンプルでは、ビットマップ番号を1としているが、GWloadbmp関数でビットマップ番号に0を指定して、割り当てられたビットマップ番号を変数で管理する方が重複等の間違いがなくて良いだろう。
◆サンプルプログラム 〔bitmap12.c〕
ビットマップ番号を変数で受け取り、画像を描画する。整数(int)型変数bnを宣言しておく。
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ GWclear(-1); bn = GWloadbmp(0, "fig1.bmp"); GWsetbmp(bn, 50.0, 50.0, 1, 1, 0); GWputbmp(bn, 100.0, 100.0, 7); /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
実行すると、前のサンプルと同じようにビットマップ画像が描画される。
◆サンプルプログラム 〔bitmap13.c〕
ビットマップ画像を座標(100, 100)に描画し、何かキーが押されたとき、さらに座標(200,200)にも同じ画像を描画する。
#include <GrWin.h> int main(void) { int width = 640, height = 400; int bn; GWopen(0); GWsize(-5, &width, &height); GWsize(-3, NULL, NULL); GWvport(0.0, 0.0, (float)width / (float)height, 1.0); GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0); /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ GWclear(-1); bn = GWloadbmp(0, "fig1.bmp"); GWsetbmp(bn, 50.0, 50.0, 1, 1, 0); GWputbmp(bn, 100.0, 100.0, 7); /* 描画 */ GWkybrd(NULL, NULL, NULL, 2); /* キー入力待ち */ GWputbmp(bn, 200.0, 200.0, 7); /* 描画 */ /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ GWquit(); return 0; }
GWkybrd関数の動作に2を指定して、何かキーが押されるまで次の処理に進まないで待つようにしている。
実行して、ビットマップ画像が座標(100, 100)に描画された後、何かキーを押すと座標(200, 200)の位置にビットマップ画像が描画される。GWputbmp関数の描画フラグを7としているので、キーを押した後、座標(100, 100)の画像は消えて、座標(200, 200)に描画される。
※※ビットマップ画像の描画について※※
「ウィンドウを閉じます」のダイアログが表示されてから、このダイアログを最初に描画した座標(100, 100)の付近にドラッグで移動すると図のように元の画像が現れる。GWputbmp関数の描画フラグを色糸変更して試してみたがこの現象は改善されなかった。
Copyright © 2005 Hiroshi Masuda |