Сохранение bitmap c bitcount = 8
От: Misha30  
Дата: 17.05.11 14:43
Оценка:
Добрый вечер. Обращаюсь к Вам за помощью ибо начинаю медленно сходить с ума. Пытаюсь сохранить раннее полученный HBITMAP в файл. Размер картинки 160*160. При глубине цвета 16 и 32 бита на пиксел работает на ура (выделяю естественно не 160*160 а 160*160*2 и 160*160*4 соответственно). А вот при 8bpp выдает ошибку "stack around variable 'a' was corrupted". Где вообще появляется мифическая переменная 'а' я так и не понял. Надеюсь на Вашу помощь.

BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
BITMAPINFO bi;
DWORD dwWB = 0;
HANDLE hFile = NULL;

unsigned char pdwBits[160 * 160];

memset (&bfh, 0, sizeof (BITMAPFILEHEADER));
memset (&bih, 0, sizeof (BITMAPINFOHEADER));
memset (&bi, 0, sizeof (BITMAPINFO));

bih.biSize = sizeof(bih);
bih.biBitCount = 8;
bih.biCompression = BI_RGB;
bih.biHeight = 160;
bih.biWidth = 160;
bih.biPlanes = 1;
bih.biSizeImage = 160 * 160;
bih.biClrUsed = 0;

bfh.bfType = 0x4D42;
bfh.bfOffBits =sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER);
bfh.bfSize = bfh.bfOffBits + 160 * 160;


bi.bmiHeader = bih;

GetDIBits (cwinDC, bmpMem, 0, 160, pdwBits, &bi, DIB_RGB_COLORS);


hFile = CreateFile ("save.bmp", GENERIC_WRITE, 0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
if (hFile == INVALID_HANDLE_VALUE) {
if (pdwBits) GlobalFree (pdwBits);
SetWindowText (g_hWnd, "Ошибка при открытии файла");
break;
}
WriteFile (hFile, (void *)&bfh, sizeof (BITMAPFILEHEADER), &dwWB, NULL));
WriteFile (hFile, (void *)&bih, sizeof (BITMAPINFOHEADER), &dwWB, NULL));
WriteFile (hFile, pdwBits, 160 * 160, &dwWB, NULL));

CloseHandle (hFile);
GlobalFree (pdwBits);
break;
bitmapinfoheader bitmapfileheader hbitmap
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.