FillMemory(pixel+i*128, 128, i);
第1引数は一行目のアドレス
for文で0~255を書き込んでますが
これはカラーテーブルを参照するということですか?
たんに、メモリ内容をiの値で埋め尽くすということですか?
教えてください。
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
static PBYTE DIB, pixel;
static PBITMAPINFO binfo;
LPRGBQUAD RGB;
HDC hdc;
PAINTSTRUCT ps;
int i;
switch(msg) {
case WM_CREATE:
DIB=(PBYTE)HeapAlloc(
GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(BITMAPINFO)+255*sizeof(RGBQUAD)+128*256
);
binfo=(PBITMAPINFO)DIB;
pixel=DIB+sizeof(BITMAPINFO)+255*sizeof(RGBQUAD);
RGB=(LPRGBQUAD)(binfo->bmiColors);
for(i=0;i<256;i++)
{
RGB[i].rgbRed =i;
RGB[i].rgbGreen =255-i;
RGB[i].rgbBlue =128-i/2;
}
binfo->bmiHeader.biSize =sizeof(BITMAPINFOHEADER);
binfo->bmiHeader.biWidth =128;
binfo->bmiHeader.biHeight =256;
binfo->bmiHeader.biPlanes =1;
binfo->bmiHeader.biBitCount =8;
binfo->bmiHeader.biCompression=BI_RGB;
for(i=0; i<256; i++){
FillMemory(pixel+i*128, 128, i);
}
return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
StretchDIBits(hdc,0,0,128,256,
0,0,128,256,pixel,binfo,
DIB_RGB_COLORS,SRCCOPY);
EndPaint(hwnd,&ps);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}
FillMemoryを検索するとMSDNのページがでてきました。
このページを見ると開始アドレスから指定されたサイズまでiの値で書き込んでいるの
ではないでしょうか。
128×256のデータを作ってるのでは?
http://msdn.microsoft.com/library/ja/default.asp?
url=/library/ja/jpmemory/html/_win32_fillmemory.asp
FillMemoryが以下のFillMemoryのことなら
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpmemory/html/_win32_fillmemory.asp
pixel+i*128から128バイトの範囲をiの値で埋め尽くすことになるね。
>これはカラーテーブルを参照するということですか?
この質問の『これ』がFillMemoryを指すならば
FillMemoryはメモリ内容を埋め尽くすためのものなので
ビットマップとかカラーテーブルとか関係ない。
お答えありがとうございます。
いろいろ解らないことがありまして参考になりました。
どうもありがとうございます。