Я новичок в подаче и не очень много об этом.
Я написал код, который пытается прочитать файл ASCII .pgm с именем owl.pgm
и пишет это как myowl.pgm
файл:
#include <fstream>
const int MAXHEIGHT=221;
unsigned char *bitmap[MAXHEIGHT]={'\0'} ;// pointers to each pixel row
int main()
{
int width=201, height=221;
std::ifstream ifile("owl.pgm",std::ios::in);
std::ofstream ofile("myowl.pgm",std::ios::out);
for(int i=0;i<height;++i)
{
for(int j=0;j<width;++j)
ifile.read(bitmap[i][j],sizeof(bitmap));
}
ofile << "P2\n" << width << " " << height << "\n255\n";
for(int i=0;i<height;++i)
{
for(int j=0;j<width;++j)
ofile<<bitmap[i][j];
}
}
По моему коду есть некоторые ошибки. Я буду благодарен, если кто-нибудь поможет мне исправить это.
Кажется, проблема в том, как вы читаете пиксели из входного файла:
std::ifstream ifile("owl.pgm",std::ios::in);
for(int i=0;i<height;++i)
{
for(int j=0;j<width;++j)
ifile.read(bitmap[i][j],sizeof(bitmap));
}
Проблема 1: Вы должны убедиться, что ваша программа не воспринимает заголовок этого файла как фактические пиксели изображения. Смотрите формат заголовка PGM. Скорее всего, вам придется пропустить первые 3 строки перед чтением пикселей.
Проблема 2: Вы пытаетесь прочитать все растровое изображение одновременно, но вы делаете это в рамках вложенного цикла, который, очевидно, предназначался для считывания растрового изображения попиксельно.
Чтение пикселей может выглядеть так:
for(int i = 0; i < height; ++i)
{
for(int j = 0; j < width; ++j)
ifile >> bitmap[i][j];
}
Других решений пока нет …