【问题标题】:CreateBitmap() returns upside down imageCreateBitmap() 返回颠倒的图像
【发布时间】:2013-11-21 02:48:47
【问题描述】:

我加载了我保存的位图的位数组。 (和 BITMAPINFOHEADER 结构)。

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);;
}

我得到颠倒的图像。我该如何解决? (我认为反转 bitsArray 将是一个解决方案,但也许有更好的方法?)

【问题讨论】:

  • 位图通常是倒置存储的。如果高度为正,则假定为自下而上,如果为负,则假定为自上而下。
  • 致电CreateDIBitmap 并在BITMAPV5HEADER 中使用正高度或负高度来让您的位图正确向上。
  • 据我记得 Windows API 文档(在 Windows NT 3.x 时代)说“CreateBitmap”不应该用于彩色位图。您应该改用 CreateCompatibleBitmap 和 SetDiBits。我不知道为什么要翻转位图,因为在 .BMP 文件中,位图已经倒置存储,而 Windows API 函数需要位图倒置存储!

标签: c++ file winapi bitmap


【解决方案1】:

调用 CreateDIBitmap 并在 BITMAPV5HEADER 中使用正高度或负高度来让您的位图以正确的方式向上。 – 大卫赫弗南 37 分钟前

【讨论】:

  • 那么,这样做有帮助吗?
猜你喜欢
  • 2015-12-26
  • 1970-01-01
  • 2022-08-05
  • 2014-05-03
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 2014-04-21
  • 2023-03-11
相关资源
最近更新 更多