将多个值写入二进制文件
Write multiple values to binary file
本文关键字:二进制文件 更新时间:2023-10-16
我有以下代码:
#include <Magick++.h>
#include <iostream>
#include <fstream>
using namespace Magick;
using namespace std;
unsigned short int version = 1;
unsigned short int cols, rows;
short int myCol, myRow;
int main(int argc, char **argv) {
ofstream myFile;
myFile.open("img001.bin", ios::out | ios::trunc | ios::binary);
myFile.write(reinterpret_cast<const char*> (&version), sizeof(version));
try {
InitializeMagick(*argv);
Image img("noname-th.jpg");
cols = img.columns();
rows = img.rows();
myFile.write(reinterpret_cast <const char*> (&cols), sizeof(cols));
myFile.write(reinterpret_cast <const char*> (&rows), sizeof(rows));
for (myCol = cols - 1; myCol >= 0; myCol--) {
for (myRow = rows - 1; myRow >= 0; myRow--) {
ColorRGB rgb(img.pixelColor(myCol, myRow));
cout << "red: " << (rgb.red() * 255);
cout << ", green: " << (rgb.green() * 255);
cout << ", blue: " << (rgb.blue() * 255) << endl;
}
}
}
catch ( Magick::Exception & error) {
cerr << "Caught Magick++ exception: " << error.what() << endl;
}
return 0;
}
这工作得很好,因为它吐出的值让我看到(并确保它正在做正确的事情。)注意:是的,我知道它是从右下角开始的,向下读到0,0。这就是目的。
我现在需要弄清楚如何将这些rgb值写入打开的文件。对于每个像素,我从rgb.red() * 255、rgb.green() * 255和rgb.blue() * 255中获取值。我如何将它们存储为r,g,b(每行一个像素)在文件中?
我想我需要对它们进行相同的字符转换,但我不知道如何将它们连接在一起在一行上。每个file.write()自动在末尾添加一个LF。
谢谢。
我假设rgb.red()
等都返回int
。如果是这样,那么您可以用与编写列数和行数完全相同的方式编写这些值:
int red = (int)(rgb.red() * 256);
myFile.write(reinterpret_cast <const char*> (&red), sizeof(red));
请注意,二进制文件没有LF或CR的概念,它们只包含二进制数据,您可以通过read()
和write()
调用来解释。
二进制文件没有'换行'或行的概念。它们只是用于文本文件,让我们凡人能够读懂它。所以在这个意义上,你不需要担心换行符。继续将二进制颜色值写入文件。您唯一应该关心的是谁在使用这个文件,以及您用来写入文件的二进制格式是否为该消费者所接受。
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- C++单个生成文件多个二进制文件
- 尝试将数字写入二进制文件时引发异常
- C++中读/写二进制文件
- 如何忽略某些二进制文件的执行?
- 对在不同二进制文件中创建的对象文件的依赖关系
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作