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;
    
    }
  • 相关阅读:
    通过数据库查看EBS的登录地址
    重启redis报错:Waiting for Redis to shutdown
    Tomcat8启动报there was insufficient free space available after evicting expired cache entries
    EBS安装过程报错,oracle.apps.fnd.txk.config.ProcessStateException: FileSys OS COMMAND Failed : Exit=2 See log for details.
    CentOS系统将UTC时间修改为CST时间
    Tomcat启动时报错,Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext
    LICEcap 录制Gif动画
    Java 8 Optional In Depth
    IntelliJ IDEA推荐插件
    Java 8 – Convert Map to LIST
  • 原文地址:https://www.cnblogs.com/autumoonchina/p/4740018.html
Copyright © 2011-2022 走看看