描画を学ぶ
描画関連のAPIをいろいろいじくって、理解を深めていくことにしましょう。
参考
創作プログラミング研究室
Wisdomsoft
DirectX周辺は後回しにして、DIBしゅうへんを洗う。
現在までの作成したもの
現在までの構成
Frameクラスの構造。
./frame.h
struct PaintEvent
{
HDC hdc;
PAINTSTRUCT ps;
};
|
./frame :: WndProc
else if(msg == WM_PAINT)
{
PaintEvent e;
e.hdc = BeginPaint(hwnd,&e.ps);
fra->onPaint(e);
EndPaint(hwnd,&e.ps);
return 0;
}
|
さてさて、描画を扱っていきましょう。
まず1次元配列を画像としてみなす。
//DWORDは32bit整数型
DWORD image[12] = {0,1,0,1,
1,0,1,0,
0,1,0,1}
BITMAPINFO構造体
//Windows標準の画像フォーマットであるBMPには、ヘッダーといわれる部分があります。
たとえば、上記のimage[12]だけでは、縦の長さがいくつなの解らないでしょう。
解決方法はたくさん考えられます。たとえば改稿タグを作るかすると良いですね。ただし
bmpの場合には一番最初に大きさや色などを指定する方法が用いられています。
うん、Bmpの最初に書かれている情報の取り扱いは BITMAPINFO が担当してくれます。
ありがたく使わせていただくことにしましょう。
以下のとおり宣言することでDIBイメージを扱うことができます
宣言
BITMAPINFO ImageInfo;
LPDWORD ImageData;
初期化
ImageData = (LPDWORD)malloc(12*sizeof(DWORD));
ImageInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
ImageInfo.bmiHeader.biWidth = 3;
ImageInfo.bmiHeader.biHeight = 4;
ImageInfo.bmiHeader.biPlanes = 1;
ImageInfo.bmiHeader.biBitCount = 32;
ImageInfo.bmiHeader.biCompression = BI_RGB;
となると、画像が表示されるわけです。
void Frame::onPaint(PaintEvent e)
{
BITMAPINFO ImageInfo;
DWORD ImageData[12]={0x00ff0000,0,0,0,
0,0,0,0,
0,0,0,0};
ZeroMemory(&ImageInfo, sizeof(ImageInfo));
ImageInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
ImageInfo.bmiHeader.biWidth = 3;
ImageInfo.bmiHeader.biHeight = 4;
ImageInfo.bmiHeader.biPlanes = 1;
ImageInfo.bmiHeader.biBitCount = 32;
ImageInfo.bmiHeader.biCompression = BI_RGB;
StretchDIBits(e.hdc, 0, 0, 100,100,
0, 0, 3,4, ImageData,
&ImageInfo, DIB_RGB_COLORS, SRCCOPY);
}
このページについて
今回の内容はすべて下記のサイトに書かれている内容です。
学んだ内容をそのまま書いています。
(
うん、これは、ネットで公開するような内容ではないですね。
ということで 現在は公開していません。2004年現在は
)
以下、のサイトを読んでいただければ、私のサイトは用なしだと思います
創作プログラミング研究室
Wisdomsoft
BM98'sROOM