首先解释一下扫描行的概念:扫描行指图像在存储器中一行像素的字节数据 。现在我们来讨论计算机中的图像数据存储情况 。
图像数据字节阵列,一般都是正向的,扫描行由底向上进行存储,也就是说,阵列中最开始的字节表示图像的左下角 。当然还有一类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,还有个调色板的的问题 。呵呵呵,希望大家看了不要发晕,我已经快晕了~~~~
推荐阅读
- 香港国际机场
- python使用什么格式划分语句块
- 文字与格式字符串不匹配
- 格式工厂怎么用
- 设计中的格式塔原理
- rtf格式怎么打开?打开用什么软件
- word文档转换成pdf文件的方法 word文档如何转换成pdf格式
- 怎么修改网页格式,清除各种讨厌的东西
- 网页设计与图像处理的最佳化分析
- 网页设计制作中图形图像处理技术的应用