【发布时间】:2017-11-19 18:29:54
【问题描述】:
对于一个学校项目,我们在某个函数中从二进制文件中读取像素,这是一种 BMP 格式。像素是来自对象的 Pixel 类型的 2D 数组。这里的目标是从二进制文件中读取 X 行和 Y 列像素。但是每行像素后面都有一些padding,可以用函数calculatePadding()计算,返回类型为unsigned。
我们要做的是逐行读取二进制文件并跳过每一行之后的填充,因为我们将像素存储在另一个变量中。这是我到目前为止所做的:
for (int i = image.height - 1; i >= 0; i--) {
for (unsigned j = 0;j < image.width; j++) {
file.read((char*)&image.pixels[i][j], sizeof(Pixel));
}
fichier.seekg(sizeof(calculatePadding(image)) + tellp() , ios::beg);
}
我的问题是最后一行(在最后一个右括号之前)。我知道我必须通过添加光标的当前位置和填充的大小来将光标向前设置。但是,我怎样才能添加一个无符号和 streampos?我不明白我应该进行什么转换。我们不允许使用ignore()
感谢您的帮助!
另外,顺便说一句,如何将“0”写入二进制文件?在下一个函数中,我必须拍摄一张图像并将其写入二进制文件,然后在有填充的二进制文件中放入“0”。
这行得通吗?
int zero = 0;
file.write((char*)&zero, sizeof(calculatePadding(image)));
【问题讨论】:
-
填充总是小于 4 个字节。我只需制作一个 4 字节数组并将填充读入其中。这很简单,你可以在写作时使用相同的技术。
-
sizeof是干什么用的?
标签: c++ input stream binary binaryfiles