简体   繁体   English

在MFC中保存位图时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM