0
Я показываю изображение в своем приложении MFC, и я хочу сохранить его как растровое изображение. Вот мой код.Ошибка при сохранении растрового изображения в MFC
BITMAPFILEHEADER bh;
ZeroMemory(&bh, sizeof(BITMAPFILEHEADER));
bh.bfType = 0x4d42; //bitmap
bh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bh.bfSize = bh.bfOffBits + ((IM_WIDTH*IM_HEIGHT*2)*3);
CFile file;
if(file.Open("Image1.bmp", CFile::modeCreate | CFile::modeWrite))
{
file.Write(&bh, sizeof(BITMAPFILEHEADER));
file.Write(&(bmi.bmiHeader), sizeof(BITMAPINFOHEADER));
file.Write(im_final, 3 * IM_WIDTH * IM_HEIGHT*2);
file.Close();
}
Я использую тот же BITMAPINFOHEADER, который использовался для отображения изображения. Но сохраненное изображение неверно. Пожалуйста, скажите мне, что я делаю неправильно.
См http://msdn.microsoft.com/en-us/library/windows/desktop/dd183391.aspx и http://webproverka.com///en.wikipedia.org/wiki/BMP_file_format. Должна быть определенная дополнительная информация после «BITMAPINFOHEADER» перед фактическими данными пикселя; точная форма этой дополнительной информации зависит от формата растрового изображения, указанного в 'BITMAPINFOHEADER'. Кроме того, каждая строка сканирования должна дополняться 4-байтной границей. Если 'IM_WIDTH' не кратно 4, то ваши вычисления размера данных неверны. Кстати, почему вы умножаетесь на 2? '* 3', вероятно, потому, что у вас есть растровое изображение 24bpp, но почему дополнительный' * 2'? –
Экстра 2 - это потому, что я масштабирую свое изображение, поэтому мне нужно удвоить высоту. Спасибо за ответ. Я просмотрю информацию заголовка. Ширина моего изображения кратная 4, поэтому это не проблема. – Khushboo
Эй, спасибо тонну :) Информация заголовка сделала это для меня. Я включил информацию о RGBQUAD и теперь работает. – Khushboo