您可能不想使用std::endl,因爲它會刷新輸出流。另外,如果你想兼容Windows(以及可能來自Microsoft的任何其他操作系統),則必須以二進制模式打開該文件。 Microsoft默認情況下會以文本模式打開文件,它通常具有不兼容性特徵(古代DOS向後兼容性),不再需要任何人:它將每個「\ n」替換爲「\ r \ n」。
的PGM文件格式標題是:
"P5" + at least one whitespace (\n, \r, \t, space)
width (ascii decimal) + at least one whitespace (\n, \r, \t, space)
height (ascii decimal) + at least one whitespace (\n, \r, \t, space)
max gray value (ascii decimal) + EXACTLY ONE whitespace (\n, \r, \t, space)
這是輸出的例子的PGM到文件:
#include <fstream>
const unsigned char* bitmap[MAXHEIGHT] = …;// pointers to each pixel row
{
std::ofstream f("test.pgm",std::ios_base::out
|std::ios_base::binary
|std::ios_base::trunc
);
int maxColorValue = 255;
f << "P5\n" << width << " " << height << "\n" << maxColorValue << "\n";
// std::endl == "\n" + std::flush
// we do not want std::flush here.
for(int i=0;i<height;++i)
f.write(reinterpret_cast<const char*>(bitmap[i]), width);
if(wannaFlush)
f << std::flush;
} // block scope closes file, which flushes anyway.
是你有沒有工作?如果是這樣,怎麼樣? – 2012-04-25 21:20:13
我不明白你的意思? – 2012-04-25 21:22:19
http://en.wikipedia.org/wiki/Portable_graymap#PGM_example – 2012-04-25 21:25:00