关于 像素对齐 行间距pitch 的问题
行间距pitch 肯定不是 图像的宽度。 一般大于 图像的宽度
这个间隙 什么时候产生和什么阶段存在的? 是将 像素写入到 磁盘 还是读入到 内存是产生的?还是一直就存在。
图像在磁盘存储时 存不存在 间隙 ? 写入到磁盘是 将 间隙的字节和像素一起写入 还是只 写入 像素字节本身?
[解决办法]
一般情况下,如果禁用了2的次幂处理,则pitch就是图像原宽度的字节数,如果没禁用,则宽度就为缩放后的宽度字节数,
总之它总是等于图像创建完后通过GetLevelDesc()函数得到的宽度的字节数
以上都是通过测试D3DXCreateTextureFromFileEx()得出的大致结果。
另外,对于一些特殊格式,情况也会有所不一样,以CreateTexture()为例:
比如:
1×1、2×2的D3DFMT_A8L8格式纹理(16位)或者D3DFMT_L8(8位)纹理,其pitch始终是4字节,而且不管是否禁用了2的次幂限制,都是4字节。(似乎4是pitch的最低值)
可能是为了最大化的提升性能,所以,做了很多特殊的处理,总之是无规律的,无法用一个“公式”直接得到什么结论的,如果能把所有情况都测试一下,然后列个表,看看pitch的值到底都是多少,或许会更好一些。
一般读写纹理时用pitch做为图像一行的宽度就不会有什么问题。
我所知道的就是这些了,都是测试的结果,没看过SDK,对不对不能保证,你参考下吧。