Qt显示16位图像

  QT从5.12版本开始,增加了QImage::Format_RGBX64、QImage::Format_RGBA64、QImage::Format_RGBA64_Premultiplied等一系列图像格式,使得显示16位位深色彩图像成为可能,读写16位tiff图像终于不用先放缩到8位再显示了(泪目);从5.13版本开始增加了QImage::Format_Grayscale16这种16位位深灰度图像格式。

1、构造图像

  构造16位图像,原始数据应是ushort类型而不是8位图像时的uchar类型,单个色彩的范围为0~65535而不是之前的0~255。添加图像数据时,原本使用setPixelColor()设置QRgba64类型的色彩,发现程序的运行效率不高,构造图像的时间比较长。事实上,QT自己的官方文档都说了setPixelColor()是一个效率很低的函数,不建议使用它来构造图像。

 1     QImage tempImg = QImage(width, height, QImage::Format_RGBX64);
 2  
 3     int bitCount = 0,index= 0;
 4     ushort nowColor;
 5     for (int j = 0; j < height; j++)
 6     {
 7         for (int i = 0; i < width; i++)
 8         {
 9             //放缩数据到0~65535,orignalData为float类型
10             nowColor = (ushort)((orignalData[index] - limitMin) * 65535 / (limitMax - limitMin));
11             index++;
12  
13             //注:setPixelColor()函数是非常耗时的操作
14             uchar* bit = tempImg.scanLine(j) + i * 8;
15             memcpy(bit, &nowColor, 2);
16             memcpy(bit+2, &nowColor, 2);
17             memcpy(bit+4, &nowColor, 2);
18             ushort maxNum = 0xffff;
19             memcpy(bit + 6, &maxNum, 2);
20             //tempImg.setPixelColor(i, j, QColor::fromRgba64(nowColor, nowColor, nowColor));
21         }
22     }

2、显示图像

  运行程序后,发现16位位深图像和之前的8位位深图像并没有太大的区别,一度怀疑自己没写正确。后来发现是自己电脑显示器只能显示8位位深图像的缘故。实际上,现在大部分的电脑都还只能显示8位位深图像,改不改成16位位深图像,看自己的硬件配置(以及老板的要求)。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓ 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.该程序用QT开发,实现图片导入、显示、缩放、拖动及处理(冷暖色、灰度、亮度、饱和、模糊、锐化)。 经实测,我写的这个软件在导入10000*7096像素的超大图片的时候,缩放的速度比2345看图软件还快,2345缩放超大图会卡顿,但本软件不会^_^ 关于程序中缩放拖动部分的说面参见我的博客https://blog.csdn.net/weixin_43935474/article/details/89327314; 2.载入图片后,鼠标移动的时候可以显示鼠所在点的图像的坐标以及灰度; 3.缩放的时候,图片右上角可以显示当前图片的缩放比例; 4.用户可导入16位深的tiff灰度图文件(一般来说是由相机拍摄的灰度图数据),导入16位深的tiff的时候,用户需要先点击界面左上角的checkbox,然后再导入tiff图片,否则图片解析不出来。 注:Qt自带的QImage只能导入8位深的tiff灰度图,如果用qt的QImage导入16位深的灰度图,图像数据会被强制转换成argb格式的图像,数据就被更改了,所以我自己编写一个解析tiff文件的功能,我翻阅了很多博客,其中如下链接给我的帮助最大: https://blog.csdn.net/chenlu5201314/article/details/56276903 上述博客作为详细解析tiff文件结构的说明文档,写的非常详细,我也是根据上面的内容,自己编写了一个解析tiff文件的类(当然功能很少,只能解析符合特定条件的tiff文件) //************************************************************ //by Bruce Xu //注:解析tiff的类只解析特定的tiff文件! //1.解析的tiff文件中只存在一幅图,如果文件中存在多幅图,本类不支持解析! //2.图像数据为8位或16位深度的灰度图,如果是其他类型的图片,本类不支持解析! //3.图片没有被压缩过! //************************************************************

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值