Я вижу несколько потенциальных проблем с кодом:
1) Как уже упоминалось в комментариях, uint8_t bufferImmagine[height*width];
проблематично, поскольку C ++ не поддерживает массивы переменной длины, поэтому, если height
и width
не могут быть преобразованы в константы времени компиляции, это будет Вместо этого лучше использовать std::vector
(или, если у вас аллергия на структуры данных, вы можете выделить массив с помощью оператора new
, но тогда вы рискуете потерять память, если не будете очень осторожны).
2) В зависимости от значений width
и height
размер bufferImmagine
может быть довольно большим; возможно, больше, чем объем доступного стекового пространства. Другая причина использовать std::vector
или выделить в куче, вместо этого.
3) Вы никогда не проверяете возвращаемое значение вызова fread()
, чтобы увидеть, прочитал ли он все данные или нет. Возможно, он читает меньше байтов, чем вы просили его прочитать (скорее всего, потому, что файл, который вы читаете, недостаточно длинный), но без проверки значения вы не узнаете, что что-то пошло не так, так что вы будете очень сбит с толку, если / когда происходит ошибка.
4) Как отметил Джек С. в своем ответе, cout
может распечатывать uint8_t
как символы ASCII, а не как целые числа, что здесь не то, что вам нужно.
5) На самом деле это не проблема, но если вы хотите, чтобы строки вашего вывода соответствовали строкам пикселей в вашем файле, тогда вы захотите применить возврат каретки в конце каждой строки. ». E.g.:
int i = 0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
const unsigned int iVal = bufferImmagine[i];
cout << iVal << " ";
i++;
}
cout << endl;
}