Загружаю бит сохраненных битовых массивов битмапа. (и структура 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 будет решением, но, может быть, есть лучший способ?)
Растровые изображения обычно хранятся с ног на голову. Если высота положительная, предполагается, что она снизу вверх, а если она отрицательная, она сверху вниз. –
Вызовите 'CreateDIBitmap' и используйте либо положительную, либо отрицательную высоту в' BITMAPV5HEADER', чтобы получить растровое изображение правильно. –
Насколько я помню, документация по Windows API говорила (в Windows NT 3.x раз), что «CreateBitmap» не следует использовать для цветовых растровых изображений. Вместо этого вы должны использовать CreateCompatibleBitmap и SetDiBits. Я не знаю, почему растровое изображение обернулось, потому что в файлах .BMP растровое изображение уже хранится перевернуто, а для функций Windows API требуется, чтобы Bitmap хранился с ног на голову! –