BITMAPFILEHEADER bmFileHeader;
BITMAPINFOHEADER bmInfoHeader;
// BMP 헤더
bmFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
bmFileHeader.bfType = 0x4D42;
bmFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bmInfoHeader.biWidth = 320; // 너비
bmInfoHeader.biHeight = 240; // 높이
bmInfoHeader.biPlanes = 1;
bmInfoHeader.biBitCount = 24; // 색상 비트
bmInfoHeader.biCompression = 0;
bmInfoHeader.biSizeImage = bmInfoHeader.biWidth * bmInfoHeader.biHeight * (bmInfoHeader.biBitCount/8);
bmInfoHeader.biXPelsPerMeter = 0;
bmInfoHeader.biYPelsPerMeter = 0;
bmInfoHeader.biClrUsed = 0;
bmInfoHeader.biClrImportant = 0;
// BMP는 아래에서 위로 저장되는 형식이기 때문에 순서대로 저장하면 뒤집히므로 파일로 저장할 데이터를 뒤집기
SPixel* rgbTemp = new SPixel[BUFSIZE]; // 파일저장할 데이터를 보관할 임시공간
for(int i=0; i<BUFSIZE; i++) {
rgbTemp[i].r = g_rgb[BUFSIZE-1-i].r;
rgbTemp[i].g = g_rgb[BUFSIZE-1-i].g;
rgbTemp[i].b = g_rgb[BUFSIZE-1-i].b;
}
// 파일로 저장
CFile file;
file.Open(_T("파일명"), CFile::modeNoTruncate | CFile::modeCreate | CFile::modeReadWrite );
file.Write(&bmFileHeader, sizeof(BITMAPFILEHEADER));
file.Write(&bmInfoHeader, sizeof(BITMAPINFOHEADER));
file.Write(rgbTemp, bmInfoHeader.biSizeImage);
file.Close();
delete rgbTemp;
AfxMessageBox(strFilename + _T("\nwas saved"));