bmp文件例子

       不同的部分:象素值

根据biBitCount参数有以下3种情况

<!--[if !supportLists]-->(1)   <!--[endif]-->有调色板(biBitCount参数值为148

此时位图文件先跟一段调色板颜色数据,再跟象素的颜色索引信息数据;

<!--[if !supportLists]-->(2)   <!--[endif]-->无调色板(biBitCount参数值为24

此时直接跟一段象素数据,每个象素由3个字节表示颜色值,顺序BGR

<!--[if !supportLists]-->(3)   <!--[endif]-->无调色板(biBitCount参数值为32

此时直接跟一段象素数据,每个象素由4个字节表示颜色值,顺序BGR

 

 

11位象素单色4×4位图,假设第13象素为黑色,其他都为白色,那么有下面的数据来表示该位图的象素颜色值

00 00 00 00 FF FF FF 00; 50 00 00 00 F0 00 00 00 F0 00 00 00 F0 00 00 00.

说明:前面8个字节,是调色板的值,单色只有黑色和白色两种,它们的RGB表示就是前面的8个字节。RGB000)为黑色,RGB255255255)为白色,

50 00 00 00表示第一行位图象素,这里只有前4位有效,其他位都是补位而已。5的二进制就是0101,它对应第一行的四个象素的颜色索引“黑白黑白”;

F0 00 00 00表示第二行的位图象素,这里也是前4位有效,F的二进制是1111,正好对应颜色索引“白白白白”;

其他行的象素颜色一样表示法。

 

注:这里单色,所以参数biBitCount1,即1位表示一个象素,所以4×4的每行就只有4位来表示象素颜色就够了,但是,系统规定必须32位对齐,所以需要280来来补足。故这里的每行都用4个字节来表示,只是后面28位没有实际用处而已。

 

注意:每个调色板中的一种颜色,必须用4个字节表示(RGB绝对值)

注意:关于象素每行补位算法,到底要补多少位,这可以不用操心,用算法

int i = ((Bitmap.bmWidth *wBitCount+31)/32)*4*Bitmap.bmHeight  得到的i就是: 描述位图象素颜色总的要用到的字节数。该字节数减去该行象素的字节数,就是补位的字节数。

 

调色板的颜色个数为2biBitCount次幂,

 

24位象素8色的4×4位图,假设第一行第一象素为绿色,第三象素为红色,第二象素为蓝色,底为黑色,则有下面的数据来表示该位图文件的颜色值

RGBQUAD  pallete[16] = { (0x0, 0x0, 0x0, 0x0), (0xFF, 0xFF, 0xFF, 0x0), (0xFF,0x0,0x0,0x0), (0x0,0xFF,0x0,0x0),( 0x0,0x0,0xFF,0x0),( 0xFF,0xFF,0x0,0x0),( 0xFF,0x0,0xFF,0x0),

(0x0,0xFF,0xFF,0x0),( 0xFF,0x80,0x0,0x0),( 0xFF,0x0,0x80,0x0),( 0xFF,0x80,0x80,0x0),

(0xFF,0xFF,0x80,0x0),( 0x80,0x80,0x80,0x0),( 0x80,0x0,0x0,0x0),( 0x,0x80,0x0,0x0),

(0x0,0x0,0x80,0x0)};

这是调色板颜色值,后面要跟各个象素的颜色索引值,它们共同组成象素颜色值的表述

32 40 00 00  00 00 00 00  00 00 00 00  00 00 00 00

第一行“32 40 00 00”分别表示“绿蓝红黑”后16位为补位;

其他行一样的理解。

 

324位象素彩色的4×4位图,假设第一行第一象素为绿色,第三象素为红色,第二象素为蓝色,底为白色,则有下面的数据来表示该位图文件的颜色值

00 FF 00  FF 00 00  00 00 FF  FF FF FF  00(标志换行)

FF FF FF  FF FF FF  FF FF FF  FF FF FF  00

FF FF FF  FF FF FF  FF FF FF  FF FF FF  00

FF FF FF  FF FF FF  FF FF FF  FF FF FF  00

 

注意24位象素的位图文件没有调色板,但是,它的每个象素也不是用4字节表示,而是用3字节表示,即没有那个颜色结构的保留字节。但是,这样就会出现每行字节不能16位对齐的问题,所以每行完了必须要有个行结束字节“00”,

 

432位象素真彩色的4×4位图,假设第一行第一象素为绿色,第三象素为红色,第二象素为蓝色,底为白色,则有下面的数据来表示该位图文件的颜色值

00 FF 00 00  FF 00 00 00  00 00 FF 00  FF FF FF 00

FF FF FF 00  FF FF FF 00  FF FF FF 00  FF FF FF 00

FF FF FF 00  FF FF FF 00  FF FF FF 00  FF FF FF 00

FF FF FF 00  FF FF FF 00  FF FF FF 00  FF FF FF 00

 

32位象素的位图,也没有调色板,但是它的颜色值是用4字节来表示的,除了RGB值外,还有一个保留值,始终为0

 

 

这里的例子没有列举8位象素64色的位图,它的文件组织格式参看4位象素16色的例子。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值