【发布时间】:2021-05-31 07:12:43
【问题描述】:
我正在尝试加载作为BITMAPINFO* 和uchar 数组提供给我的图像。
文档声明它是标准的 Microsoft 设备无关位图 (DIB),具有 8 位像素和 256 项颜色表。
我目前可以通过以下方式打开此图片:
BITMAPINFO* bmih = givenBITMAPINFO;
uchar* data = givenData;
QImage img = QImage(data, bmih->biWidth, bmih->biHeight, QImage::Format_Grayscale8);
但我有两个问题:
-
当文档声明一个 8 位像素和一个 256 项颜色表时,图像位于
QImage::Format_Grayscale8; -
图像颠倒并镜像。这来自位图数据在 Win32 中的存储方式。
有人知道我如何正确加载此图像吗?
【问题讨论】:
-
8 位 DIB 的颜色信息存储在调色板中。该调色板遵循标准位图文件中的
BITMAPINFOHEADER。除非您的指针指向BITMAPINFOHEADER,然后是调色板,否则您无法协调颜色信息。 -
好的,我想我可以从
BITMAPINFO获取颜色表。但是图像是向后的,什么是最有效的加载方式? -
似乎没有任何
QImagec'tors 能够翻转图像,因此您必须应用QImage::mirrored 作为第二步。另请注意,有QImage::setColorTable。结合QImage::Format_Indexed8 图像格式,您应该能够构建图像。 -
QImage::mirrored() 复杂度高还是应该使用其他库?
-
如有疑问,请测量。垂直翻转图像不可避免地会导致复制内存中的所有像素数据。任何图像库都必须这样做。
标签: c++ qt winapi qimage bitmapdata