|
#define BMP_FILE_NAME 0x4d42 //BM
#define HEIGHT 144
#define WIDTH 176
#define COLOR 256
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
RGBQUAD bmp_pal[COLOR];
//BITMAPFILEHEADER 설정
bmih.biSize=sizeof(BITMAPINFOHEADER);
bmih.biWidth=WIDTH;
bmih.biHeight=HEIGHT;
bmih.biPlanes=1;
bmih.biBitCount=8;
bmih.biCompression=BI_RGB;
bmih.biSizeImage=WIDTH*HEIGHT;
bmih.biXPelsPerMeter=0;
bmih.biYPelsPerMeter=0;
bmih.biClrUsed=COLOR;
bmih.biClrImportant=0;
//BITMAPINFOHEADER 설정
bmfh.bfType=BMP_FILE_NAME;
bmfh.bfSize=sizeof(BITMAPFILEHEADER)+((COLOR)*sizeof(RGBQUAD))+sizeof(BITMAPINFOHEADER)
+bmih.biSizeImage;
bmfh.bfReserved1=0;
bmfh.bfReserved2=0;
bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
+(COLOR*sizeof(RGBQUAD))-2;
//PALETTE 설정
for(i=0;i<COLOR;i++) //8bit-> 256 monochrome 설정
{
bmp_pal[i].rgbRed=i;
bmp_pal[i].rgbGreen=i;
bmp_pal[i].rgbBlue=i;
bmp_pal[i].rgbReserved=0;
}
이 정보를 raw 파일 앞에다 붙여 넣으면 bmp 가 됩니다.
중간에 bmfh.bfOffBits = 부분에서 -2 한부분이 있는데 이는 빌더에서만 이상하게도 사이즈가 다르게 나와 -2 해준겁니다.
visual ms 에서는 -2 안쓰고해야 됩니다.
그리고 bmfh 는 다음과 같이 써넣기 하면 올바른 bmp 파일이 되지 않습니다.
fwrite(&Bmfh,sizeof(BITMAPFILEHEADER),1,out);
이부분을 풀어서 bmfh.bfType, bfSize... 등 5개 따로 따로 써넣어주어야 합니다. 빌더에서만.. 왜그런지는 @.@ 모름.
나머지는 다음과 같은순서대로 쓰면됩니다.
fwrite(&Bmih,sizeof(BITMAPINFOHEADER),1,out);
fwrite(Bmp_pal,sizeof(RGBQUAD),COLOR,out);
fwrite(raw_buffer,sizeof(BYTE),HEIGHT*WIDTH,out);
위 순서대로 써 넣으면 완성.
이희성 님이 쓰신 글 :
: 8비트 yuv422 y cr cb로우 데이타를 비트맵으로 변환하려 할때?
: 빌더 폼에 어떤식으로 뿌려주는건가요..? 대충 사이트 읽어보았는데 잘 모르겠네여..
|