Я пишу простой читатель PGM-файлов для основной идеи CV, и у меня есть странная проблема. Мой метод работает нормально для симметричных файлов (например, 255 х 255), но когда я пытаюсь прочитать асимметричный файл (300 х 246), я получаю какой-то странный ввод. Один файл читается в определенную точку, а затем сбрасывает символы ESCAPE (ASCII 27) в оставшуюся часть изображения (см. Ниже), а другие просто не читаются. Я думаю, что это может быть некорректная логика или проблема с памятью. Любая помощь будет оценена по достоинству.Чтение файлов PGM не читает асимметричные файлы
// Process files of binary type (P5)
else if(holdString[1] == '5') {
// Assign fileType value
fileType = 5;
// Read in comments and discard
getline(fileIN, holdString);
// Read in image Width value
fileIN >> width;
// Read in image Height value
fileIN >> height;
// Read in Maximum Grayscale Value
fileIN >> max;
// Determine byte size if Maximum value is over 256 (1 byte)
if(max < 256) {
// Collection variable for bytes
char readChar;
// Assign image dynamic memory
*image = new int*[height];
for(int index = 0; index < height; index++) {
(*image)[index] = new int[width];
}
// Read in 1 byte at a time
for(int row = 0; row < height; row++) {
for(int column = 0; column < width; column++) {
fileIN.get(readChar);
(*image)[row][column] = (int) readChar;
}
}
// Close the file
fileIN.close();
} else {
// Assign image dynamic memory
// Read in 2 bytes at a time
// Close the file
}
}
Попробуйте создать твердокодированное изображение [row] [column], где вы не динамически выделяете память. Это позволит вам определить, считывает ли файл файл или есть ли другая ошибка при динамическом распределении памяти. Часто в таких случаях индекс [y, x] изменяется на обратную или жестко запрограммирован как [x, x]. – Mark