2013-11-08 2 views
1

Загружаю бит сохраненных битовых массивов битмапа. (и структура BITMAPINFOHEADER).CreateBitmap() возвращает с ног на голову изображение

HBITMAP Filemanager::LoadNextImageFromMyFile(HANDLE file) 
{ 
HDC hdc = GetDC(father->hWindow->_hwnd); 
DWORD dwTmp; 
BITMAPFILEHEADER hdr; 
ReadFile(file,&hdr,sizeof(BITMAPFILEHEADER),&dwTmp,NULL); 
BITMAPINFOHEADER pbih; 
ReadFile(file, &pbih,sizeof(BITMAPINFOHEADER) 
    + hdr.bfReserved1 * sizeof (RGBQUAD),&dwTmp,NULL); 
LPBYTE lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih.biSizeImage); 
BYTE* hp = lpBits; 
ReadFile(file,hp,pbih.biSizeImage, &dwTmp, NULL); 
return CreateBitmap(pbih.biWidth,pbih.biHeight,pbih.biPlanes,pbih.biBitCount, hp);; 
} 

Я получаю с ног на голову изображение. Как я могу это исправить? (я думаю, что обратное bitArray будет решением, но, может быть, есть лучший способ?)

+5

Растровые изображения обычно хранятся с ног на голову. Если высота положительная, предполагается, что она снизу вверх, а если она отрицательная, она сверху вниз. –

+0

Вызовите 'CreateDIBitmap' и используйте либо положительную, либо отрицательную высоту в' BITMAPV5HEADER', чтобы получить растровое изображение правильно. –

+0

Насколько я помню, документация по Windows API говорила (в Windows NT 3.x раз), что «CreateBitmap» не следует использовать для цветовых растровых изображений. Вместо этого вы должны использовать CreateCompatibleBitmap и SetDiBits. Я не знаю, почему растровое изображение обернулось, потому что в файлах .BMP растровое изображение уже хранится перевернуто, а для функций Windows API требуется, чтобы Bitmap хранился с ног на голову! –

ответ

1

Позвоните в CreateDIBitmap и используйте положительную или отрицательную высоту в BITMAPV5HEADER, чтобы получить растровое изображение правильно. - Дэвид Хеффернан 37 мин назад

+1

Итак, это помогло? –

Смежные вопросы