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

// 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值