Возможно, вы не захотите использовать 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)
Это пример для вывода МПГ в файл:
#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.
Это то, что вы не работаете? Если да, то как? –
Я не понимаю, что вы имеете в виду? –
http://en.wikipedia.org/wiki/Portable_graymap#PGM_example –