Я пытаюсь сделать простой конвертер изображений (формат ppm к пользовательскому), и у меня возникла проблема с методом ifstream.read. Несмотря на это:ifstream.read только читает половину файла
int rows,cols, maxV;
char header [100], *ptr;
std::ifstream im;
//open image in binary format
im.open(name.c_str(), std::ios::in | std::ios::binary);
if (!im)
{
std::cout << "Can't read image!" << std::endl;
exit(1);
}
//read the header of the image
im.getline(header, 3,'\n');
//test if header is P6
if ((header[0] != 80) || (header[1] != 54))
{
std::cout << "Image" << name << "is not .ppm format" << std::endl;
}
//get next line for height and width
im.getline(header,100,'\n');
//dont read the comments
while (header[0] == '#')
im.getline(header,100,'\n');
//number of columns, rows
cols = strtol(header, &ptr, 0);
rows = strtol(header, &ptr, 0);
maxV = strtol(header, &ptr, 0);
const int rows1=rows;
const int cols1=cols;
Component * tbuffer;
const_cast<Component*> (tbuffer);
tbuffer = new Component[rows1*cols1 * 3];
im.read((char *)tbuffer, cols*rows * 3);
std::cout << tbuffer[3000000] << std::endl;
im.close();
Он читает только 2.700.007 элементы выхода из 4.320.000 образа я пытаюсь читать. поэтому tbuffer [3.000.000] будет «cout» NULL. Я что-то пропустил?
Изменить: О компоненте:
typedef unsigned char Component;
EDIT2: Изображение 1200 * 1200 (смещ_по_столбцы * строка). 2.700.007 - последний индекс tbuffer со значением в нем. остальная часть tbuffer остается пустой
Добро пожаловать в Переполнение стека. Возможно, вам захочется вырезать пух (приветствия) и сделать его [MCVE] (https://stackoverflow.com/help/mcve), поэтому нам не нужно так много догадываться, что остальное в вашем коде. Если вы взяли [тур] (http://stackoverflow.com/tour), возможно, вы уже знаете, что пытаетесь это сделать. Мы можем догадаться, что ошибаемся, и поэтому не находим фатальной ошибки! – Deduplicator
Что такое 'Компонент'? – Axalo
Извините, я забыл про Компонент. Отредактировано –