Qt 显示灰度Unpacked 10 raw图

风陵南·2025-02-24 10:37·2 次阅读

Qt 显示灰度Unpacked 10 raw图

Qt显示raw图

在Qt中无法直接显示raw图,需要先将raw图以二进制读取,再对QImage每个像素进行赋值操作

读取raw图(提前知晓raw图的宽高)#

以二进制形式读取raw图,这里读取到vector中存储;由于是Unpacked 10类型,占10位,所以使用quint16占16位的类型来存储

  • 如果是8位的raw图则使用quint8或其他8位的类型存储
Copy
std::vector<quint16> rawData;
size_t dataSize = width * height * sizeof(quint16);;
std::ifstream ifs(filePath.toStdString());
if(!ifs.is_open()){
qDebug() << filePath << " cant open";
return;
}
ifs.seekg(0, std::ios::end);
size_t actual_size = ifs.tellg();
ifs.seekg(0, std::ios::beg);
// 匹配文件大小 防止宽高错误
if (actual_size != dataSize) {
std::cerr << "文件大小不匹配!" << std::endl;
return;
}
// 读取数据到缓冲区
rawData.resize(width * height);
ifs.read(reinterpret_cast<char*>(rawData.data()), actual_size);
ifs.close();

创建QImage#

以灰度8位QImage::Format_Grayscale8的形式创建QImage,并对每个像素点单独赋值

  • 注意:Unpacked 10是10位范围是0~1024而8位是0~255,需要进行右移操作使其范围控制在0~255以内
Copy
QImage image(width, height, QImage::Format_Grayscale8);
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
// QImage::Format_Grayscale8的范围是0~255
// 需要对0~1024像素值进行缩放映射到0~255对应范围中
quint8 pixel = rawData[y * width + x] >> 2;
// 设置像素值
// 使用 qRgb 函数将灰度值转换为 QRgb 类型
QRgb gray = qRgb(pixel, pixel, pixel);
image.setPixel(x, y, gray);
}
}

显示raw图#

创建一个label组件,设置其Pixmap属性,并调用QPixmap::fromImageQImage转为QPixmap即可完成图片的显示

Copy
// 显示图片
ui->label->setPixmap(QPixmap::fromImage(image));
posted @   风陵南  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示
目录