我有以下代码:
#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。
谢谢。