Неподдерживаемый размер для файла формата BMP
Я реализовывал консольное приложение, которое принимает на вход картинку формата BMP изменяет её (перекрашивает некоторые пиксели) и выводит её копию. Суть в том, что я помещаю первые 54 байта в буфер bmpHeader, затем копирую и изменяю информацию о пикселях, создаю новый файл, куда записываю bmpHeader и pixelInfo(информацию с перекрашенными пикселями) fwrite(bmpHeader, 1, 54, newBMP); fwrite(pixelInfo, 1, height * width * 3, newBMP); таким образом. Итог такой, что если задать размер исходного BMP файла, например, 101 x 101, то новый файл получиться битым (Windows пишет: "Данный файл не поддерживается"). Хотя при 100 x 100 работает. И ещё есть такая закономерность, что размер mod 4 должен быть равен 0.
Ответы (1 шт):
Размер заголовка не обязательно 54 байта, он может меняться. Лучше определите, где начинаются пиксельные данные, из поля bfOffBits
height * width * 3 - неверная формула. Правила выравнивания строк требуют, чтобы размер строки был (деление целочисленное)
ByteWidth = (BitsPerPixel * Width + 31) / 32 * 4
Так что размер данных
ByteWidth * height