原地址:http://blog.csdn.net/ykm0722/article/details/7447632

Qt可显示基本的图像类型,利用QImage、QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放、旋转)。

1. Qt可显示的图像类型

参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP、GIF、JPG、JPEG、PNG、TIFF、PBM、PGM、PPM、XBM、XPM。

2. Qt用如何显示图像

通常用QLabel显示图像,QLabel类有setPixmap()函数,可以用来显示图像。也可以直接用QPainter画出图像。

如果图像过大,直接用QLabel显示,将会出现有部分图像显示不出来,这时可以用Scroll Area部件。方法:将QLabel部件放到Scroll Area部件里面,将两个采用栅格布局,当图像超出了QLabel部件大小时,就会产生滑动杆,这样图像就可以都看到了。

3. 显示的方法

步骤:先打开一个图像;将图像文件加载进QImage对象中;再用QPixmap对象获得图像;最后用QLabel选择一个QPixmap图像对象显示。

代码如下:

    QString filename;filename=QFileDialog::getOpenFileName(this,tr("选择图像"),"",tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));if(filename.isEmpty()){return;}else{QImage* img=new QImage;if(! ( img->load(filename) ) ) //加载图像        {QMessageBox::information(this,tr("打开图像失败"),tr("打开图像失败!"));delete img;return;}ui->label->setPixmap(QPixmap::fromImage(*img));}

注:也可以直接用QPixmap类的对象采用Load函数加载图像。这里说下QImage和QPixmap类的用处:QImage为图像的像素级访问做了优化,QPixmap使用底层平台的绘制系统进行绘制,无法提供像素级别的操作,而QImage则是使用独立于硬件的绘制系统。

4. 图像缩放

图像缩放采用scaled函数。函数原型

QImage QImage::scaled ( const QSize & size,Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationModetransformMode = Qt::FastTransformation ) const

使用方法如下,还是利用上面的img:

QImage* imgScaled = new QImage;
*imgScaled=img->scaled(width,height,Qt::KeepAspectRatio);
ui->label->setPixmap(QPixmap::fromImage(*imgScaled));

scaled函数中width和height表示缩放后图像的宽和高,即将原图像缩放到(width,height)大小。

5. 图像旋转

图像旋转可以利用QImage类的transformed函数,向transformed函数传入QMatrix对象,QMatrix对象指定了旋转的角度。

代码如下:

QImage* imgRatate = new QImage;
QMatrix matrix;
matrix.rotate(270);
*imgRotate = img->transformed(matrix);
ui->label->setPixmap(QPixmap::fromImage(*imgRotate));

注意:rotate函数中参数是旋转的角度,旋转是按顺时针方向旋转的,上面顺时针旋转270度,即逆时针旋转90度。

6. 图像连续缩放
有了图像缩放的基础,就可以实现图像的连续缩放,可以放置一个横向滑竿(中文解释不标准,就是Horizontal Slider部件 ),滑动滑轮的位置以实现图像连续缩放。

Horizontal Slider部件指向的值为整型value,即缩放后的图像为

img->scaled(orignalWidth*value/100,
                         orignalHeight*value/100,
                         Qt::KeepAspectRatio);

orignalWidth和orignalHeight为原始图像的宽和高。

注意:在对原始图像进行缩放多少倍数时,在相应的槽函数内只需要调用Horizontal Slider部件对象的setValue函数即可,因为Horizontal Slider部件滑竿指向的值一旦变化就会触发对应的槽函数来对图像进行缩放。

转载于:https://www.cnblogs.com/lanye/p/3487774.html

Qt中图像的显示与基本操作相关推荐

  1. css3 描两个边,CSS3 / 指定四条边中图像的显示方法 - 汇智网

    绘制四个角不同半径的圆角边框 可以在border-image属性中指定元素四条边中的图像是以拉伸的方式显示,还是以平铺的方式显示,指定方法如下所示. border-image: url(文件路径) A ...

  2. qt5设置linux系统时间,Qt中使用QLabel显示时间的两种方法

    Qt中使用QLabel显示时间的两种方法思路一致,只是实现方法不一样而已. main.cpp #include "displaytime.h" #include int main( ...

  3. qt linux实现鼠标位置自动移动,【已解决】qt中鼠标能显示但是无法移动

    [问题] 在完成了Linux kernel中的对应的一个模拟鼠标的输入设备(input device)easypoint驱动后,验证了该驱动可以正常工作了,输入 cat /dev/input/even ...

  4. QT中利用Qlabel显示当前的时间:年-月-日-时-分-秒-星期

    一.第一步初始化 QTimer *timer_calendar;//用来显示当前日期的定时器timer_calendar = new QTimer(this);//new一个QTimer对象conne ...

  5. Qt中树形结构显示目录结构

    第一种,直接用QTreeWidget,这种情况用到QDir类,用递归实现,代码如下 void LoadFiles(QString path, QTreeWidget *treewidget, QTre ...

  6. QT中关于窗口全屏显示与退出全屏的实现

    近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...

  7. 在Qt中查看.raw文件

    在Qt中查看.raw文件 Qt中图像类为QImage,而OpenCV对图像操作使用Mat/IplImage,因此,想要在Qt的控件上查看.raw文件需要先将IplImage/Mat转换为QImage ...

  8. Qt中的QLabel组件

    文章目录 1 QLabel组件 1.1 QLabel简介 1.2 图片自适应 QLabel 的大小 1 QLabel组件 1.1 QLabel简介 QLabel组件: QLabel用于显示一个提示性的 ...

  9. opencv 图像读写显示、matplotlib 库图像读写显示

    图片格式: bmp 全称:Bitmap 不压缩 png 全称:Portable Network Graphics 无损压缩 jpg 全称:Joint Photographic Experts Grou ...

最新文章

  1. 阿里某新员工感慨:入职阿里三个月生活一团糟,想辞职休息
  2. LeetCode 143. 重排链表(Reorder List)
  3. 【计算机网络】聊一聊那些常见的网络通信的性能指标
  4. 音视频技术开发周刊 | 165
  5. Java 8中的Base64 –加入乐趣为时不晚
  6. fullpage在vue单页面当中使用会出现的问题以及解决办法
  7. Facebook正在追踪你,哪怕你不是用户丨扎克伯格国会听证第二日
  8. LeetCode 53最大子序和
  9. Word邮件合并技巧四则
  10. 继承与data member之单一继承
  11. HTML与CSS实现淘宝静态页面(参考版)
  12. 95后CEO讲述创业“邮件经”
  13. 从内容打到社交,头腾大战矛头又指向了游戏
  14. Objective-C学习笔记(1)——OC的基本概念和类
  15. 计算机演示文稿实验报告,演示文稿实验报告.doc
  16. 计算机界面无法全部显示,电脑屏幕不能完整显示软件界面怎么处理
  17. Python学习手册之数据类型
  18. 半监督学习之伪标签(pseudo label,entropy minimization,self-training)
  19. 在Centos下安装java jdk
  20. windows7以上平台NDIS6框架的NDIS协议驱动开发

热门文章

  1. git 应用 远程仓库分歧
  2. C语言 mallocfree
  3. python语言在命名上是什么敏感的_一文轻松掌握python语言命名规范规则
  4. 23、90秒快速“读懂”STP(生成树)工作原理
  5. matlab实训心得体会,MatLab实习心得体会
  6. 基于lis3dh的简易倾角仪c源码_开源网关apisix源码阅读和最佳实践
  7. 计算机基础知识背诵口诀,内部资料--教育基础知识背诵口诀(一遍记住)
  8. java二维数组模拟用户登录_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)...
  9. java.util.list e_java.util 类 StackE - Java 中文参考手册
  10. 多线程糗事百科案例(python2)