生成一幅windows位图:TestBmp,要…

来源:互联网 发布:如何隐藏域名信息 编辑:程序博客网 时间:2024/06/05 20:44
// TestBmp.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include
using namespace std;
long const m_Width = 32;
long const m_Height = 32;

int _tmain(int argc, _TCHAR* argv[])
{
BITMAPFILEHEADER bitmapFileHead;
BITMAPINFOHEADER bitmapInfoHead;
RGBQUAD rgbQuad[256];
int i;

//设置BMP信息头,为了兼容以后的版本,加入这一项目使程序能够通过结构的大小来判断文件格式的版本
bitmapInfoHead.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfoHead.biWidth = m_Width;//宽
bitmapInfoHead.biHeight = m_Height;// 高
bitmapInfoHead.biPlanes = 1;//一个页面,单层
bitmapInfoHead.biBitCount = 8;//8位彩色,共256色
bitmapInfoHead.biCompression = BI_RGB;//常量,等于0,不压缩
bitmapInfoHead.biSizeImage = m_Width*m_Height;//像素总大小
//这个值为在具有不同像素大小的显示设备上显示同样大小的图像(如果需要的话)提供必要的信息
bitmapInfoHead.biXPelsPerMeter = 9600;
bitmapInfoHead.biYPelsPerMeter = 9600;
bitmapInfoHead.biClrUsed = 0; //使用颜色数,可写0
bitmapInfoHead.biClrImportant = 0;//关键颜色数,同上

//对调色板赋值,得到红色渐变的调色板
for(i = 0;i<256;i++)
{
rgbQuad[i].rgbBlue = (BYTE)i;//蓝色亮度
rgbQuad[i].rgbGreen = (BYTE)i;//绿色亮度
rgbQuad[i].rgbRed = 255;//红色亮度
rgbQuad[i].rgbReserved = 0;//保留位
}

char chData[32][32];//位图信息
FillMemory(&chData,sizeof(chData),0);//清零
for(i = 0;i<32;i++)
{
for(int j = 0;j<32;j++)
{
chData[i][j] = i*8; //写入调色板中的颜色号
}
}

//对文件头进行赋值
bitmapFileHead.bfType = (WORD)0x4D42; //"BM"
bitmapFileHead.bfSize =(DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256+m_Width*m_Height);
bitmapFileHead.bfReserved1 = 0;//保留
bitmapFileHead.bfReserved2 = 0;//保留
bitmapFileHead.bfOffBits =(DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256);//把头文件等信息偏移计算出来
//打开输出文件
fstream fout;
fout.open("test.bmp",ios::out|ios::binary);
if(!fout.good())
{
  MessageBox(NULL,L"文件打开失败",L"提示",MB_ICONINFORMATION);
// MessageBox(NULL,"文件打开失败","提示",MB_ICONINFORMATION);
//发现新浪博客可以无法处理/*方式的文字输入。
//错误 1 error C2664: “MessageBoxW”: 不能将参数 2 从“const char[13]”转换为“LPCWSTR      
//本人不是很熟悉使用vs2012,暂时搁置该错误,但以后熟练了 再完善

return -1;
}
//写入
fout.write((char*)&bitmapFileHead,sizeof(BITMAPFILEHEADER));//写文件头
fout.write((char*)&bitmapInfoHead,sizeof(BITMAPINFOHEADER));//写信息头
fout.write((char*)&rgbQuad,sizeof(RGBQUAD)*256); //写调色板
fout.write((char*)&chData,m_Width*m_Height);  //写数据
fout.close();

return 0;
}


算是开始图形的处理了,最起码看到bmp文件头和信息头等结构了,慢慢来

0 0
原创粉丝点击