位图4字节对齐问题
2014-06-04 20:48
316 查看
在自己对图像数据进行处理的时候,会有字节对其的问题,由于之前使用的图像大都是8bit或者是24bit,32bit的图像,使用的对其公式是(pixelwidth*channel+3)/4*4。后面也有看到有些写法如:(width * bitCounts + 31) / 32 * 4,不是很理解原理。在网上查找,发现有解释的非常透澈的,下面借来用用。
原文链接:/content/1761744.html
1. 首先来自于这样一个公式:(width * bitCounts / 8 + 3) / 4 * 4,该公式含义比上面的公式要容易理解一些,比如biWidth * biBitCount代表了对齐前每行的总位数,位图有1位、2位、4位、8位、16位、24位、32位等,大于8位的都是8的倍数,所以biWidth * biBitCount / 8是对齐前的总字节数,要4字节对齐,除以4,看余数多少,不够多少补多少。而因为除以4的余数只能是0、1、2、3这四种情况,0就是刚好整除不需要再补,1、2、3分别需要补3、2、1个字节才能凑足4字节。那么
我们在除之前先补上3个字节会是什么情况呢,对于四种余数情形,分别是余3(3+0)、0(3+1)、1(3+2)、2(3+3),对于整数操作(width * bitCounts / 8 + 3) / 4得到的结果不会有余数,刚好达到了我们需要补足4字节的目的;另外再考虑能不能先补上别的数字,例如1、2,根据前面余数情况分析,补1会漏掉余数为1、2的情况,补2会漏掉余数为1的情况; 再考虑补上4或者更大数字的情况,余数为0的情形补4就多了4字节,数字再往上就更加多余,所以补上最大余数刚刚合适。
2. 上面的分析对于位宽大于等于8的位图已经正确,但小于8位的情况,width * bitCounts不一定是8的整数倍,所以我们先不要除以8,而是按照4字节等于32个bit位来计算,我们看看需要补多少位使得刚好32位对齐,那么就有公式:(width * bitCounts + n)/ 32 * 4 跟1中的分析方法相同,n应为32的最大余数31,所以得到最终公式:(width * bitCounts + 31)/ 32 * 4。
原文链接:/content/1761744.html
1. 首先来自于这样一个公式:(width * bitCounts / 8 + 3) / 4 * 4,该公式含义比上面的公式要容易理解一些,比如biWidth * biBitCount代表了对齐前每行的总位数,位图有1位、2位、4位、8位、16位、24位、32位等,大于8位的都是8的倍数,所以biWidth * biBitCount / 8是对齐前的总字节数,要4字节对齐,除以4,看余数多少,不够多少补多少。而因为除以4的余数只能是0、1、2、3这四种情况,0就是刚好整除不需要再补,1、2、3分别需要补3、2、1个字节才能凑足4字节。那么
我们在除之前先补上3个字节会是什么情况呢,对于四种余数情形,分别是余3(3+0)、0(3+1)、1(3+2)、2(3+3),对于整数操作(width * bitCounts / 8 + 3) / 4得到的结果不会有余数,刚好达到了我们需要补足4字节的目的;另外再考虑能不能先补上别的数字,例如1、2,根据前面余数情况分析,补1会漏掉余数为1、2的情况,补2会漏掉余数为1的情况; 再考虑补上4或者更大数字的情况,余数为0的情形补4就多了4字节,数字再往上就更加多余,所以补上最大余数刚刚合适。
2. 上面的分析对于位宽大于等于8的位图已经正确,但小于8位的情况,width * bitCounts不一定是8的整数倍,所以我们先不要除以8,而是按照4字节等于32个bit位来计算,我们看看需要补多少位使得刚好32位对齐,那么就有公式:(width * bitCounts + n)/ 32 * 4 跟1中的分析方法相同,n应为32的最大余数31,所以得到最终公式:(width * bitCounts + 31)/ 32 * 4。
相关文章推荐
- 位图四字节对齐问题
- 位图4字节对齐问题
- 四字节对齐问题
- C#通过SOCKET与delphi 的通讯问题(一)之 字节对齐
- 关于字节对齐问题的解释.
- C struct 中字节对齐问题
- C语言中的字节对齐问题
- 字节对齐的问题
- 编译warning,字节对齐?奇怪的问题
- 关于C编译器里字节对齐的问题
- 关于struct和union存储的内存字节对齐的问题
- ACE的CDR中的字节对齐问题
- bmp图像的字节对齐问题
- 关于字节对齐的问题(vs.net)(转载)
- 字节序与字节对齐问题
- 关于struct结构中字节对齐问题
- HBITMAP对位图数据存储的字节对齐
- ARM程序由于字节对齐引起的问题深入分析
- 结构体字节对齐问题 [转]
- struct 中字节对齐问题