[英]Error while saving a bitmap in MFC
I am displaying an image in my MFC application and I want to save it as bitmap. 我在MFC应用程序中显示图像,我想将其另存为位图。 Here is my code.
这是我的代码。
BITMAPFILEHEADER bh;
ZeroMemory(&bh, sizeof(BITMAPFILEHEADER));
bh.bfType = 0x4d42; //bitmap
bh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bh.bfSize = bh.bfOffBits + ((IM_WIDTH*IM_HEIGHT*2)*3);
CFile file;
if(file.Open("Image1.bmp", CFile::modeCreate | CFile::modeWrite))
{
file.Write(&bh, sizeof(BITMAPFILEHEADER));
file.Write(&(bmi.bmiHeader), sizeof(BITMAPINFOHEADER));
file.Write(im_final, 3 * IM_WIDTH * IM_HEIGHT*2);
file.Close();
}
I am using the same BITMAPINFOHEADER which I used to display the image. 我使用的是用于显示图像的BITMAPINFOHEADER。 But the saved image is not correct.
但是保存的图像不正确。 Please tell me what am I doing wrong.
请告诉我我在做什么错。
This is the code I am using now which works fine: 这是我现在使用的代码,可以正常工作:
BITMAPFILEHEADER bmfh;
bmfh.bfType = 0x4d42; /* "BM" */
bmfh.bfSize = (sizeof(BITMAPFILEHEADER) + bmih.biSize + bmih.biClrUsed * sizeof(RGBQUAD) + bmih.biSizeImage);
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + bmih.biSize + bmih.biClrUsed * sizeof(RGBQUAD);
CString file = m_filepath;
char* savefile = file.GetBuffer();
hFile = CreateFile(savefile, GENERIC_WRITE, 0, (LPSECURITY_ATTRIBUTES) NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
WriteFile(hFile, (char *) &bmfh, sizeof(BITMAPFILEHEADER), (LPDWORD) &err, NULL);
WriteFile(hFile, (char *) &bmih, sizeof(BITMAPINFOHEADER), (LPDWORD) &err, NULL);
WriteFile(hFile, (char *) &bmi.bmiColors, sizeof(bmi.bmiColors), (LPDWORD) &err, NULL);
WriteFile(hFile, im_rgb, bmih.biSizeImage, (LPDWORD) &err, NULL);
CloseHandle(hFile);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.