mfc把rgb图像数据存为bmp文件

网上一堆的说法,我用了都不行,包括那个写好的和我差不多的。

不过我只要存成24位的图就行了。以下上代码:

typedef struct tagBITMAPFILEHEADER {
        WORD    bfType;
        DWORD   bfSize;
        WORD    bfReserved1;
        WORD    bfReserved2;
        DWORD   bfOffBits;
} BITMAPFILEHEADER


typedef struct tagBITMAPINFOHEADER{
        DWORD      biSize;
        LONG       biWidth;
        LONG       biHeight;
        WORD       biPlanes;
        WORD       biBitCount;
        DWORD      biCompression;
        DWORD      biSizeImage;
        LONG       biXPelsPerMeter;
        LONG       biYPelsPerMeter;
        DWORD      biClrUsed;
        DWORD      biClrImportant;
} BITMAPINFOHEADER


void SaveBMP()

{

    HANDLE fh;//文件句柄
    BITMAPFILEHEADER bmfHdr; //位图文件头结构    
    BITMAPINFOHEADER bmfInfo; //位图信息头结构  
    DWORD bmwidth,bmsize,dwWritten,dwDIBSize;
    BYTE *pBmpBuff=new BYTE [m_Width*m_Height*3];//数据内存
    CString BMPname;//文件名字


    fh = CreateFile(BMPname, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,  
            FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);    

        if (fh != INVALID_HANDLE_VALUE)   
        {
            bmwidth=(((m_Width*24)+31)>>5)<<2;
            bmsize=bmwidth*m_Height;
            //   设置位图文件头    
            bmfHdr.bfType = 0x4D42;     //   "BM"    
            dwDIBSize = sizeof (BITMAPFILEHEADER)       
                + sizeof (BITMAPINFOHEADER)    
                + bmsize;      
            bmfHdr.bfSize = dwDIBSize;    
            bmfHdr.bfReserved1 = 0;    
            bmfHdr.bfReserved2 = 0;    
            bmfHdr.bfOffBits = (DWORD)sizeof (BITMAPFILEHEADER)     
                + (DWORD)sizeof (BITMAPINFOHEADER);   

            bmfInfo.biSize = sizeof (BITMAPINFOHEADER);    
            bmfInfo.biWidth = m_Width;    
            bmfInfo.biHeight = m_Height;    
            bmfInfo.biPlanes = 1;      
            bmfInfo.biBitCount = 24;    
            bmfInfo.biCompression = BI_RGB;    
            bmfInfo.biSizeImage = 0;    
            bmfInfo.biXPelsPerMeter = 0;    
            bmfInfo.biYPelsPerMeter = 0;    
            bmfInfo.biClrUsed = 0;    
            bmfInfo.biClrImportant = 0;
            //   写入位图文件头    
            WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
            //   写入位图信息头
            WriteFile(fh, (LPSTR)&bmfInfo, sizeof(BITMAPINFOHEADER), &dwWritten, NULL);
            //   写入位图像素    
            WriteFile(fh, (LPSTR)pBmpBuff, bmsize,  
                &dwWritten, NULL);  
            CloseHandle(fh);
    }
    delete pBmpBuff;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值