我有以下代碼:寫多個值,以二進制文件
#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;
}
這個偉大的工程,因爲它吐出來給我看看(並確保它在做正確的事情。)注的值:yes ,我知道它從右下角開始讀到0,0。這是這裏的意圖。
我現在需要的是弄清楚如何將這些rgb值寫入打開的文件。對於每個像素,我從rgb.red()* 255,rgb.green()* 255和rgb.blue()* 255獲取值。如何將這些值存儲爲r,g,b(每行一個像素)在文件中?
我想我需要對它們進行相同的char轉換,但我不知道如何將它們連接在一起。每個file.write()都會在最後自動添加一個LF。
謝謝。
退房http://en.cppreference.com/w/cpp/io/basic_ostream/write –
感謝您的建議。我想我不瞭解的是如何將它們作爲一個字符串(用逗號分隔)並將其寫出來。我可以將單個值寫出來(在轉換爲char *之後),但我不確定如何在文件中將所有三個值作爲一行。 – KirAsh4
你在寫文本文件還是二進制文件?如果它是二進制的,那麼爲什麼你需要用逗號分隔值呢? –