zoukankan      html  css  js  c++  java
  • 将Byte数组保存成24位BMP

    直接上源代码:

    #include "stdafx.h"
    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    class CSaveByteToBmp
    {
    public:
        bool SaveDIB2Bmp(int fileNum, const CString& BMPFileName, int iWidth, int iHeight, BYTE *pBuffer);
        void ConstructBih(int nWidth, int nHeight, BITMAPINFOHEADER& bih);
        void ContructBhh(int nWidth, int nHeight, BITMAPFILEHEADER& bhh);//add 2010-9-04;
    protected:
    private:
    
    };

    然后是cpp:

    #include "stdafx.h"
    #include "SaveByteToBmp.h"
    
    //保存buffer到bmp文件
    bool CSaveByteToBmp::SaveDIB2Bmp(int fileNum, const CString& BMPFileName, int iWidth, int iHeight, BYTE *pBuffer)
    {
        BITMAPINFOHEADER bih;
        ConstructBih(iWidth, iHeight, bih);
        BITMAPFILEHEADER bhh;
        ContructBhh(iWidth, iHeight, bhh);
    
        int widthStep = (((iWidth * 24) + 31) & (~31)) / 8; //每行实际占用的大小(每行都被填充到一个4字节边界)
        int DIBSize = widthStep * iHeight;  //buffer的大小 (字节为单位)
    
        CFile file;
        try
        {
            if (file.Open(BMPFileName, CFile::modeWrite | CFile::modeCreate))
            {//写入文件
    
                file.Write((LPSTR)&bhh, sizeof(BITMAPFILEHEADER));
                file.Write((LPSTR)&bih, sizeof(BITMAPINFOHEADER));
                file.Write(pBuffer, DIBSize);
                file.Close();
                return true;
            }
    
        }
        catch (...)
        {
            MessageBox(NULL, _T("CSaveByteToBmp::SaveDIB2Bmp"), _T("tips"), MB_ICONERROR);
        }
        return false;
    }
    
    
    
    //构建BMP位图文件头
    void CSaveByteToBmp::ContructBhh(int nWidth, int nHeight, BITMAPFILEHEADER& bhh) //add 2010-9-04
    {
        int widthStep = (((nWidth * 24) + 31) & (~31)) / 8; //每行实际占用的大小(每行都被填充到一个4字节边界)
        bhh.bfType = ((WORD)('M' << 8) | 'B');  //'BM'
        bhh.bfSize = (DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+widthStep * nHeight;
        bhh.bfReserved1 = 0;
        bhh.bfReserved2 = 0;
        bhh.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER);
    
    }
    
    
    //构建BMP文件信息头
    void CSaveByteToBmp::ConstructBih(int nWidth, int nHeight, BITMAPINFOHEADER& bih)
    {
        int widthStep = (((nWidth * 24) + 31) & (~31)) / 8;
    
        bih.biSize = 40;       // header size
        bih.biWidth = nWidth;
        bih.biHeight = nHeight;
        bih.biPlanes = 1;
        bih.biBitCount = 24;     // RGB encoded, 24 bit
        bih.biCompression = BI_RGB;   // no compression 非压缩
        bih.biSizeImage = widthStep*nHeight * 3;
        bih.biXPelsPerMeter = 0;
        bih.biYPelsPerMeter = 0;
        bih.biClrUsed = 0;
        bih.biClrImportant = 0;
    
    }
  • 相关阅读:
    lLinux 下 Stress 压力测试工具
    zabbix 微信告警配置
    spark Intellij IDEA开发环境搭建
    Spark调优与调试
    在centos 6.5 x64中安装 spark-1.5.1
    二叉树的各种遍历算法
    ServletResponse的一些知识点
    UVA 10303 How Many Trees? (catlan)
    UVA 10183 How Many Fibs?
    UVA 10471 Gift Exchanging
  • 原文地址:https://www.cnblogs.com/autumoonchina/p/4740018.html
Copyright © 2011-2022 走看看