c++ - 从 BITMAPINFO 和 uchar* 数据创建 QImage
问题描述
我正在尝试加载作为 aBITMAPINFO*
和uchar
数组提供给我的图像。文档声明它是标准的 Microsoft 设备无关位图 (DIB),具有 8 位像素和 256 项颜色表。
我目前可以通过以下方式打开此图像:
BITMAPINFO* bmih = givenBITMAPINFO;
uchar* data = givenData;
QImage img = QImage(data, bmih->biWidth, bmih->biHeight, QImage::Format_Grayscale8);
但我有两个问题:
QImage::Format_Grayscale8
当文档声明一个 8 位像素和一个 256 项颜色表时,图像就在其中;图像颠倒并镜像。这来自位图数据在 Win32 中的存储方式。
任何人都知道如何正确加载此图像?
解决方案
通过将提供的标题转换为 aBITMAPINFO
而不是 aBITMAPINFOHEADER
我可以访问颜色表,然后应用转换来获得一个立体图像:
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);
推荐阅读
- angular - 如何在具有 mat-radio-group 的“selected”属性的 Angular Material 中选择 mat-radio-button?
- ajax - 使用烧瓶,ajax - 获取响应头值
- azure - 使用托管标识访问托管在 azure 上的 kubernetes 集群中的 azure keyvault
- wiki - 有没有办法将 Confluence 项目的文档导出到 GitLab Wiki?
- delphi - 缩放所有表单控件后如何获得通知?
- java - Libgdx 从 Image 或 Drawable 中获取纹理
- scala - 将用 SCALA 编写的 Spark UDF 转换为 JAVA
- python - dict变量后的方括号是什么意思
- python - Youtube 下载进度条问题
- reactjs - 未捕获的错误:目标容器不是 DOM 元素。在反应