我有一个图像数据的二进制文件,每个像素正好是4位。图像数据如下:
有N个图像,其中第一个图像是1x1,第二个图像是2x2,第三个图像是4x4,依此类推(如果您想知道,它们是mipmaps)。
给定一个指向数据缓冲区开头的指针,我想跳到最大的图像。
现在我知道我想跳过多少字节,但是在开始时有一个恼人的1x1图像,它是4位。我不知道怎么一点一点地增加一个指针。
我怎样才能成功地检索数据,而不让所有的东西都关闭4位呢?
最佳答案
假设您可以更改文件格式,则可以执行以下任一操作:
为1x1图像添加填充
以相反的顺序存储图像(实际上与上面一样,但不适合mip映射,因为您不一定知道将有多少图像)
如果无法更改格式,可以选择:
转换数据
接受缓冲区偏移半个字节,并相应地使用它
你说:
如何在不关闭所有功能的情况下成功检索数据
4比特?
所以这意味着你需要转变。计算偏移量(字节)时,会发现第一个偏移量包含前一个图像的半字节。所以在紧要关头你可以这样洗牌:
for( i = start; i < end; i++ ) {
p[i] = (p[i] << 4) | (p[i+1] >> 4);
}
假设第一个像素是4-7位,第二个像素是0-3位,依此类推。。。如果是相反的话,就把这两班倒过来。