将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;

}
时间: 2024-11-08 07:55:58

将Byte数组保存成24位BMP的相关文章

24位bmp彩色图转换为24位灰度图的方法

一.所用到的流处理函数: fstream:可同时进行读写操作的文件类:或 ofstream:写操作(从内存中读数据到文件)的文件类: ifstream:读操作(从文件读数据到内存)的文件类. 二.位图文件的格式: ① 位图文件头,所用结构体:BITMAPFILEHEADER,占14个字节 ② 位图信息头,所用结构体:BITMAPINFOHEADER,占40个字节 ③ 颜色表项,所用结构体:RGBQUAD,由biBitCount值决定 ④ 数据区,当结构体BITMAPINFOHEADER中的成员变

关于Opengl中将24位BMP图片加入?一个alpha通道并实现透明的问题

#include <windows.h>#include <GL/glut.h>#include <GL/glaux.h>#include <stdio.h> #pragma comment( lib, "opengl32.lib" )// 链接时使用OpenGL32.lib#pragma comment( lib, "glu32.lib" )// 链接时使用GLu32.lib  #pragma comment( li

php把数组保存成文件格式

php把数组保存为文件格式的函数实例,或许有的还没听说过可以把数组保存成文件,其实这样做也是另有它用的,两种方法各有千秋,有兴趣的PHP爱好者敬请参阅: $file="./cache/file.cache";//定义要保存的数组文件路径.名称 $array = array("color" => array("blue", "red", "green"), "size" =>

java的byte数组转换成在[0,255]范围内

C#的byte    是 0-255java的byte  是 -128-127  java的byte数组转换成在[0,255]范围内int data[]= new int[bytes.length];for(int i=0;i<bytes.length;i++) { data[i] = bytes[i] & 0xff;}

android开发:把一个byte数组转换成wav音频文件,并且播放

============问题描述============ 如题,byte数组转换成wav音频文件,并且播放,下面代码能生成data/data/com.example.playwav/cache/temp.wav 但是在播放的时候报异常. 我把代码和Log贴在下面了. 我分析,原因应该是wav文件格式的编解码问题,不能这么随随便便把任意的一个byte数组就转化为了wav 希望了解wav编解码开发的童鞋给点解决办法 byte[] a = { 52, 51, 48, 28, 58, 64, 98,-1

【数字图像】C++8位和24位BMP位图的平滑、锐化、二值化处理,以及24位真彩图的灰度化

头文件: typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned int DWORD; typedef long LONG; //BMP文件头(14字节) typedef struct tagBITMAPFILEHEADER { //WORD bfType;//位图文件的类型,必须为BM(在结构体中读取会发生错误,所以在函数中读取) DWORD bfSize;//位图文件的大小,以字节为单位 WORD b

C# byte数组转成Bitmap对象

方法一: /// <summary> /// 将数组转换成彩色图片 /// </summary> /// <param name="rawValues">图像的byte数组</param> /// <param name="width">图像的宽</param> /// <param name="height">图像的高</param> /// <

C#中如何把byte[]数组转换成其他类型

http://bbs.csdn.net/topics/20447859 byte[] bytes = new byte[256]; //receive some stream from network int a,b,c,d; string theStr; a = (int)bytes[0]; b = (int)bytes[1]; c = (int)bytes[2]; d = (int)bytes[3]; byte[] newBytes = byte[bytes.Length-4]; for( 

八叉树算法将24位bmp图像转变为8位彩色图像

https://blog.csdn.net/r250tgc/article/details/89604254 #define _CRT_SECURE_NO_DEPRECATE #include <windows.h> #include <cstdio> #include <cmath> #include<iostream> #include<string.h> #include<cstring> using namespace std