c++ - 二进制文件位操作

标签 c++ c image-processing

我有一个图像数据的二进制文件,其中每个像素正好是 4 位。图像数据布局如下:

有 N 张图片,第一张图片是 1x1,第二张图片是 2x2,第三张图片是 4x4,依此类推(如果您想知道的话,它们是 mipmap)。

给定一个指向数据缓冲区开始的指针,我想跳到最大的图像。

现在我知道我想跳过多少字节,但在开始时有一个烦人的 1x1 图像,它是 4 位。反正我不知道要逐位递增指针。

我怎样才能成功检索数据,而不会所有内容都关闭 4 位?

最佳答案

假设您可以更改文件格式,您可以执行以下任一操作:

  • 向 1x1 图像添加填充
  • 以相反的顺序存储图像(与上面的效果相同,但对于 mip-maps 并不理想,因为您不一定知道您将拥有多少图像)

如果您无法更改格式,您有以下选择:

  • 转换数据
  • 接受缓冲区偏移半个字节并相应地使用它

你说:

How can I successfully retrieve the data without everything being off by 4 bits?

所以这意味着您需要转换。当您以字节为单位计算偏移量时,您会发现第一个包含前一个图像的半个字节。所以在紧要关头你可以像这样洗牌:

for( i = start; i < end; i++ ) {
    p[i] = (p[i] << 4) | (p[i+1] >> 4);
}

假设第一个像素是第 4-7 位,第二个像素是第 0-3 位,依此类推...如果情况相反,只需反转这两个移位即可。

关于c++ - 二进制文件位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14885068/

相关文章:

c - 解析 txt 文件并写入 2 个单独的文件

python - 瞄准质心 - scipy/numpy

c++ - ‘operator>>’ 中 ‘std::cin >>' 的模糊重载

C++ regex_match match_continuous 标志与开始子字符串不匹配

c - malloc() 分配的数据不为零

image-processing - 检查图像是否包含文本?

ruby - OS X 上的 Camellia Ruby 计算机视觉库

python - Python中的递增迭代器(iter)

c++ - 没有 RTTI 的 dynamic_cast

c - memcpy 后调试器无法正常工作