画板BMP格式保存和打开总结

画板BMP格式保存和打开总结

         刚做完画板的自定义保存和BMP格式保存,我觉得有必要总结一下。先是比较简单的自定义保存。

         万物皆对象,对象由属性和方法构成。我们保存其实保存的是属性,保存的是关键的数据。比如画板的保存,画了一条直线,那么就把图形的名称“直线”,图形的颜色,图形的两个坐标,存储起来就可以了。打开时读取数据,再把这条直线画上去就可以了。其他可以有更复杂的图形,对象,但是思路是一致的。

         然后,保存是把数据存储起来,这就要自己决定一种存储数据的方式,存储哪些数据,按照什么先后顺序。读取时的顺序必须和存储时一样,不然就会出错。这就是所谓的文件格式。文件的格式不是由文件的扩展名决定的。如果把word文档的扩展名改成.txt,照样可以用word文档打开。所以格式就是这种存储的方式。

         接下来讲BMP文件。BMP文件由四部分组成:

1.       位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息

2.       位图信息数据结构,它包含BMP图像的宽、高、压缩方法,以及定义颜色等信息。

3.       调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩塑图(24位的BMP)就吧不需要调色板。

4.       位图数据,这个部分的内容根据BMP位图使用的位数的不同而不同,在24位位图中直接使用RBG,而其他的小于24位的使用调色板中颜色索引值。

那么接下来就来比较详细地讲一下各个数据结构。

BMP文件头(14字节)

Int bfType;       //位图文件的类型,必须为’B’’M’两个字母(0-1字节)

Int bfSize;                   //位图文件的大小,以字节为单位(2-5字节)

Int usignedshort bfreserved01;       //文图文件保留字,必须为06-7字节)

Int usignedshort bfreserved02;       //文图文件保留字,必须为08-9字节)

 

Int bfOffBits;    //文件头的偏移量表示,以字节为单位(10-13字节)

 

 

 

 

 

 

 

 

 


位图信息头(40字节)

用于说明位图的尺寸等信息

 

 

int size;     //本结构所占用的字节数(14-17字节)

int image_width;     //位图的宽度,以像素为单位(18-21字节)

int image_height;   //位图的高度,以像素为单位(22-25字节)

int planes;         //目标设备的级别,必须为126-27字节)

int biBitCount;                 //每个像素所需的位数,必须是1(双色),(28-29字节)416色),8256色)或24(真彩色)之一

int biCompression //位图的压缩类型,必须是0(不压缩),(30-33字节)416色),8256色)或24(真彩色)之一

int sizeImage;//为位图大小

int biXpelsPerMeter;//水平分辨率

int biYPelsPerMeter;//垂直分辨率

int biClrUsed;//位图实际使用的颜色表中的颜色数

int biClrImportant;//位图显示过程中重要的颜色

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

颜色表

颜色表用于说明图中的颜色,它有若干个表项,每一个表项是一个RBGQUAD类型的结构,定义一种颜色。

class RBGQUAD{

    byte rbgBlue;//蓝色的亮度(值范围为0-255

    byte rbgGreen;//绿色的亮度(值范围为0-255

    byte rbgRed;//红色的亮度(值范围为0-255

    byte rbgReserved;//保留,必须为0

}

 

 

 

 

 

 

 

 

 

颜色表中RBGQUAD结构的个数有biBitCount来确定。当biBitCount=148时,分别有2,16,256个表项;当biBitCount=24时,没有颜色表项。

位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:

class BITMAPINFO{

    BITMAPINFOHEADER bmiHeader;//位图信息表

    RGBQUAD bmiColors[1];//颜色表

}

 

 

 

 

 

         位图数据

         位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,在扫描行间是从上到下。位图的一个像素值所占的字节数。

         biBitCount=1时,8个像素占1个字节

         biBitCount=4时,2个像素占1个字节

         biBitCount=8时,1个像素占1个字节

         biBitCount=24时,1个像素占3个字节

         Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。

 

BMP文件的保存大概就是那样的了,下面是我做的一个简易画图板,可以实现BMP格式的保存和打开,代码详见附件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值