如何用Qt显示16位的Raw图像,将其转为QImage的类型

qq_38439721 2020-04-17 05:19:36
现在我有一些CT的原始图像,3072*1944的大小,两位为一个像素,通过读取赋值之后并不能正确显示,求帮助!(image设置的格式是RGB16,图片是灰度图但是Grayscale8是8位的,试了也没有用)
unsigned short * Ii = (unsigned short*)malloc(vol*sizeof(unsigned short));

size_t size =fread(Ii,sizeof(unsigned short),vol,fp) ;

int k=0;
for(int j=0;j<1944;j++){
for(int i=0;i<3072;i++){

QRgb Value = qRgb(Ii[k],Ii[k],Ii[k]);

image.setPixel(i,j,Value);
k++;
}
}
ui->label_2->setPixmap(QPixmap::fromImage(image));
...全文
2618 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mideum 2020-04-18
  • 打赏
  • 举报
回复
可以下载一个Raw Viewer之类的Raw图片查看器,各种格式一个个试
mideum 2020-04-18
  • 打赏
  • 举报
回复
只从raw数据没有办法知道格式的,你要问数据的提供方或者设备提供方或者看说明文档之类的
或者就是自己一个个试,就我的经验16bit的RGB不常用,YUV的可能性更大
sizeInBytes()是从5.10开始有的,如果你用的是旧的版本,就用byteCount()
qq_38439721 2020-04-18
  • 打赏
  • 举报
回复
image后面无法调用sizeInBytes()这个函数,然后我想问一下怎么才能看图片具体格式,之前就想看了,但是找不到方法。
mideum 2020-04-17
  • 打赏
  • 举报
回复
补充一下,想起来16bit还有一个很有可能的格式,就是YUV422
如果是YUV的话就不能直接用在QImage上了,要先把数据转成RGB才行
mideum 2020-04-17
  • 打赏
  • 举报
回复
QImage image(3072, 1944, QImage::Format_RGB16);
size_t size =fread(bits,sizeof(unsigned short),vol,fp);
类似这样试试,读前应该确认一下vol*2应该等于image.sizeInBytes()
还有确认一下你的图片格式,16位一个像素有多种可能,除了RGB6,还有RGB555,ARGB4444。

21,503

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧