我们知道数字图像的像素段可以简单看成一个二维的数组。
但如果每行的长度不是4字节的倍数,DIB处理中行需要补零,那么像素在内存中的存储便不是一直连续的。既然不是连续的,请问又如何以数组的方式对图像进行操作,而这样的数组又如何和指针建立联系。
当然,如果我们忽略上面的问题,可以单纯的拿指针去处理。但24位,16位,以及8位之间的转换依然非常麻烦,他们每行补零的情况又各有不同。
请各位指点迷津。
但如果每行的长度不是4字节的倍数,DIB处理中行需要补零,那么像素在内存中的存储便不是一直连续的。既然不是连续的,请问又如何以数组的方式对图像进行操作,而这样的数组又如何和指针建立联系。
当然,如果我们忽略上面的问题,可以单纯的拿指针去处理。但24位,16位,以及8位之间的转换依然非常麻烦,他们每行补零的情况又各有不同。
请各位指点迷津。
但看相关书籍和资料,并没有人特别对补零进行处理。
但看相关书籍和资料,并没有人特别对补零进行处理。
就是这个公式就可以了,指针指到0的时候就跳过去,不要读取就可以了
[/Quote]像素位也可能是0啊。。
边界对齐根本没什么影响,你的二维数组也一样边界对其不就行了。本质上C/C++的[]操作也就是指针操作而已,既然每行的数据长度是相同的当然可以作为二维数组来用。
核心是计算每行的字节数,就是一个简单的4字节对齐(实际上是补位(32BITS))的问题
进行渲染的时候,不是按二位数组的尺寸,而是实际的图像宽度(头中的定义)进行,按行