首页 > 学院 > 手机玩家 > 正文

BMP图像格式的补充

2024-06-09 18:00:17
字体:
来源:转载
供稿:网友
首先解释一下扫描行的概念:扫描行指图像在存储器中一行像素的字节数据。现在我们来讨论计算机中的图像数据存储情况。
图像数据字节阵列,一般都是正向的,扫描行由底向上进行存储,也就是说,阵列中最开始的字节表示图像的左下角。当然还有一类BMP是倒向的,在Potoshop7.0中另存BMP时有翻转行序的选项,这样的BMP,扫描行由顶向下进行存储,也就是说,阵列中最开始的字节表示图像的左上角。一般的,都是用的正向的BMP。
图像扫描行的大小,取决于图象的颜色数目和用象素表示的图象宽度。
BMP格式还有个非常重要的规定:要求每一扫描行的字节数据必须能被4整除,也就是DWord对齐(Dword是一种数据类型,长度为4个字节)。如果图像的一行字节数不能被4整除,就需要在每行的未尾补齐0以达到规定。
设图像位数为N,图像宽为W(以像素数表示),高为H(以像素数表示),扫描行字节数为L,现在我们来看一下图像的一些情况。
1、图像的颜色数=2的N次方。图像位数指像素用二进制数表示时的位数。16位图像的颜色数为2的16次方=65536,这就是我们常说的6万色了。
2、一个字节是8位,这样每个像素所需字节数=N/8。
3、图像每行的字节数=W*N/8
4、图像每一扫描行的字节数L要求必须能被4整除。
当W*N/8能被4整除时,L=W*N/8;
当W*N/8不能被4整除时,需要在每行数据补零字节数为4-(W*N/8) Mod 4(Mod是求余运算,X mod Y指X除以Y的余数),这样L=W*N/8+4-(W*N/8) Mod 4。
5、图像数据阵列的字节大小=L*H
6、图像文件的大小,如果是用photoshop保存的图像,除了文件头及数据阵列之外,还要加上未尾两个字节的0。文件头的大小,24位图为36h=54,16位r5g6b5图为46h=70,8位为436h=1078。
例如:一幅16位r5g6b5的图像,N=16,若W=13,H=11,W*N/8=26不能被4整除,需要在每行数据后补零字节数4-26 Mod 4=2,在HW也就是每26个字节要补上0000。L=W*N/8+2=28。图像数据阵列字节大小=L*H=28*11=308,图像文件大小=308+70+2=380。
T4/T5中的图像数据是16位r5g6b5格式的,但是不同于计算机中的r5g6b5,它并不要求扫描行能被4整除,所以不存在补零的问题。对r5grb6,由于W*N/8=W*16/8=W*2,所以当图像宽W为奇数时,如果把这样的r5g6b5往手机AXF中替换,必须把其中补的零去掉。
对于T4/T5,其中的图像数据阵列大小直接就等于L*H=W*N/8*H=W*H*2。
除了上述提到到的BMP格式,还有别的很多格式,有不同的讲究,尤其是8位BMP,还有个调色板的的问题。呵呵呵,希望大家看了不要发晕,我已经快晕了~~~~
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选