如何解决从 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);
但是我有两个问题:
-
当文档说明 8 位像素和 256 个条目的颜色表时,图像位于
QImage::Format_Grayscale8
中; -
图像是倒置和镜像的。这来自于位图数据在 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 举报,一经查实,本站将立刻删除。