Qt 显示灰度Unpacked 10 raw图
Qt显示raw图
在Qt中无法直接显示raw图,需要先将raw图以二进制读取,再对QImage每个像素进行赋值操作
读取raw图(提前知晓raw图的宽高)#
以二进制形式读取raw图,这里读取到vector中存储;由于是Unpacked 10类型,占10位,所以使用quint16
占16位的类型来存储
- 如果是8位的raw图则使用
quint8
或其他8位的类型存储
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以内
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::fromImage
将QImage
转为QPixmap
即可完成图片的显示
// 显示图片 ui->label->setPixmap(QPixmap::fromImage(image));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)