gpt4 book ai didi

c++ - 将多个值写入二进制文件

转载 作者:行者123 更新时间:2023-11-28 03:15:24 24 4
gpt4 key购买 nike

我有以下代码:

#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() 调用解释的二进制数据。

关于c++ - 将多个值写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17054552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com