forums.inprise.com 이 참 좋더군요... 심심해서 거기에 있는 글을 좀 읽었더니 8분만에 대답해 주시는 분도 있고요... 굉장한 사람들이 모여있더군요... 재밌는 곳이었음. 그중에 borland.public.cppbuilder.graphics 라는 보드가 있는데요... Chris Hill (Chris244@aol.com) 분이 대답해 주셨음니다.
#define ImgWidth 256 //이미지의 크기 정하기
#define ImgHeight 256
//결국 중요한 것은 bitmap header부분을 만들어 넣어주는 것이다. 이건
//bitmap 포맷을 참조해야 한다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
LPBITMAPINFO bitinfo;
unsigned char image[ImgHeight][ImgWidth];
FILE *fp;
fp = fopen("hands.raw", "rb");
if( fp == NULL ) return;
bitinfo = (LPBITMAPINFO)new char[sizeof(BITMAPINFO) +
255*sizeof(RGBQUAD)];
bitinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitinfo->bmiHeader.biWidth = ImgWidth;
bitinfo->bmiHeader.biHeight = ImgHeight;
bitinfo->bmiHeader.biPlanes = 1;
bitinfo->bmiHeader.biBitCount = 8;
bitinfo->bmiHeader.biCompression = BI_RGB;
bitinfo->bmiHeader.biSizeImage = 0;
bitinfo->bmiHeader.biXPelsPerMeter = 0;
bitinfo->bmiHeader.biYPelsPerMeter = 0;
bitinfo->bmiHeader.biClrUsed = 256;
bitinfo->bmiHeader.biClrImportant = 256;
// gray palette를 만든다. 256 color 와 16, 24, 32 bit color일때
// 당연히 다르다.
for(int i = 0; i < 256; i++)
{
bitinfo->bmiColors[i].rgbRed = char(i);
bitinfo->bmiColors[i].rgbBlue = char(i);
bitinfo->bmiColors[i].rgbGreen = char(i);
bitinfo->bmiColors[i].rgbReserved = 0;
}
for( int i=0; i<ImgHeight; i++)
{
fread( image[i], 1, ImgWidth, fp );
}
::SetDIBitsToDevice( Canvas->Handle,0,0,ImgWidth,ImgHeight,0,0,
0,ImgHeight,image,bitinfo,
DIB_RGB_COLORS);
fclose( fp );
delete[] bitinfo;
}
정말 될듯될듯 하면서 안되니까 속터지더군요...
참고로 forums.inprise.com은 news group입니다.
|