微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 BITMAPINFO 和 uchar* 数据创建 QImage

如何解决从 BITMAPINFO 和 uchar* 数据创建 QImage

我正在尝试加载作为 BITMAPINFO*uchar 数组提供给我的图像。 该文档指出它是一个标准的 Microsoft 设备无关位图 (DIB),具有 8 位像素和 256 个条目的颜色表

我目前可以通过以下方式打开此图像:

BITMAPINFO* bmih = givenBITMAPINFO;
uchar* data = givendata;

QImage img = QImage(data,bmih->biWidth,bmih->biHeight,QImage::Format_Grayscale8);

但是我有两个问题:

  1. 当文档说明 8 位像素和 256 个条目的颜色表时,图像位于 QImage::Format_Grayscale8 中;

  2. 图像是倒置和镜像的。这来自于位图数据在 Win32 中的存储方式。

有人知道如何正确加载这张图片吗?

解决方法

通过将提供的标头转换为 BITMAPINFO 而不是 BITMAPINFOHEADER,我可以访问颜色表,然后应用转换以获得直的图像:

BITMAPINFO* bmi = givenHeader;
uchar* data = givenData;

QImage img = QImage(data,bmi->bmiHeader.biWidth,bmi->bmiHeader.biHeight,QImage::Format_Indexed8);

img.setColorCount(256);
for (int i=0; i<256; ++i){
    RGBQUAD* rgbBmi = bmi->bmiColors;
    img.setColor(i,qRgb(rgbBmi[i].rgbRed,rgbBmi[i].rgbGreen,rgbBmi[i].rgbBlue))
}

img = img.mirrored(false,true);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。