目录

一、概述

1、Qt可显示的图像类型

2. Qt用如何显示图像

二、图像旋转

1、transformed函数实现图片旋转

2、使用QPainter

三、图像缩放

1、scaled函数实现图像缩放

2、QPainter实现

3、图像连续缩放


一、概述

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部件大小时,就会产生滑动杆,这样图像就可以都看到了。

二、图像旋转

1、transformed函数实现图片旋转

使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下:

QMatrix matrix;
matrix.rotate(45);QPixmap pix = QPixmap(“:/images.png”).transformed(matrix, Qt::SmoothTransformation);
QLabel *plabel= new QLabel(this);
pLable->setPixmap(pix);

该段程序实现的效果是使图片顺时针旋转 45 度。

2、使用QPainter

使用 QPainter 这位“画家”,示例程序如下:

void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.save();QPixmap disc(":/disc.png");/* 碟机转动 */if(imageRotate++ == 360)imageRotate = 0;/* 设定旋转中心点 */painter.translate(130,150);/* 旋转的角度 */painter.rotate(imageRotate);/* 恢复中心点 */painter.translate(-130,-150);/* 画图操作 */int x=40,y=60;painter.drawPixmap(x,y,180,180, disc);//x,y为屏幕上画的位置painte.restore();
}

三、图像缩放

1、scaled函数实现图像缩放

图像缩放采用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)大小。

2、QPainter实现

使用 QPainter 这位“画家”,示例程序如下:

void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.save();QPixmap disc(":/disc.png");/* 碟机转动 */if(imageRotate++ == 360)imageRotate = 0;/* 设定旋转中心点 */painter.translate(130,150);/* 旋转的角度 */painter.rotate(imageRotate);painter.scale(2,2);/* 恢复中心点 */painter.translate(-130,-150);/* 画图操作 */int x=40,y=60;painter.drawPixmap(x,y,180,180, disc);//x,y为屏幕上画的位置painte.restore();
}

3、图像连续缩放

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

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

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

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

QT 实现图片旋转及缩放相关推荐

  1. 全网最全!!Qt实现图片旋转及图片旋转动画的几种方式

    实现图片旋转的两种方式 第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; ...

  2. java graphics2d旋转_JAVA用Graphics2D实现图片旋转,缩放,合成

    第一步:读入文件 public BufferedImage loadImageLocal(String path) { try { return ImageIO.read(new File(path) ...

  3. android 点击图片旋转90度,Android UI之ImageView实现图片旋转和缩放

    这一篇,给大家介绍一下ImageView控件的使用,ImageView主要是用来显示图片,可以对图片进行放大.缩小.旋转的功能. android:sacleType属性指定ImageVIew控件显示图 ...

  4. QT实现图片的滚轮缩放、框选放大、拖拽移动

    序言 QT用来做界面程序是真的方便,它本身封装了很多类库,需要的时候直接拿来用就行. QT的类继承关系网上有很多相关的文章,这里不做赘述.但是简单的界面程序最主要的继承关系还是如下图: 可以将QT的类 ...

  5. Qt5:Qt中图片的翻转,旋转,缩放,扭曲操作

    具体用到了  mirror()  shear()  scaled() translate() rotate() 等函数函数等会儿再写 (其中  translate() 和 rotate() 俩函数组合 ...

  6. 自定义View实现图片的绘制、旋转、缩放

    1.图片 把一张JPG图片改名为image.jpg,然后拷贝到项目的res-drawable中. 2.activity_main.xml 1 <LinearLayout xmlns:androi ...

  7. qt 实现 以图片为中心 让它旋转_QT图片旋转动画

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1 QT图片旋转动画 1. ...

  8. Fresco 二三事:图片处理之旋转、缩放、裁剪切割图片

    关于Fresco加载图片的处理,例如旋转.裁剪切割图片,在官方文档也都有提到,只是感觉写的不太详细,正好最近项目里有类似需求,所以分享一些使用小tip,后面的朋友就不用再走弯路浪费时间了.(测试图片分 ...

  9. QT实现图片缩放的同时标记指定坐标

    本文以我的另一篇文章<QT实现图片缩放>为基础,连接为:https://blog.csdn.net/weixin_43935474/article/details/89327314 现在有 ...

最新文章

  1. JAVA——关闭ServerSocket
  2. 多线程生产者和消费者
  3. vs2010本地调试打不开网页
  4. 8 线程安全且高效的单例模式
  5. 2019阿里云开年Hi购季满返活动火热报名中!
  6. 鸿海集团否认郭台铭辞任董事长:只是希望退居二线
  7. CentOS7编译安装ntp
  8. sring-list-del-string-int:解析左右编码器的,和#号
  9. 2.1~3 32位及64位x86处理器介绍
  10. 二或四 通道USB数据采集卡如合通过CMI耦合,构成USB高速多通道数据采集卡
  11. 西电2021计算机考研大纲,2021年西安电子科技大学硕士研究生833计算机学科专业基础综合考试大纲...
  12. 三大条件致病菌|大肠埃希氏菌、血链球菌、李斯特菌
  13. 关于SqlServer练习题
  14. 云服务器哪家好?阿里云国际版还是华为云国际版?
  15. php 模拟微信登录,PHP 模拟登录微信公众平台
  16. 卡尔曼滤波简介(转载)
  17. 5.5 图层样式的复制和粘贴 [原创Ps教程]
  18. PageRank算法(二)
  19. NTS-NetTopologySuite中判断shape中的点是否有压盖、重叠
  20. Java 乐观锁 悲观锁

热门文章

  1. 寄存器英文全称中文翻译英文对照表
  2. VTK从分割好的体数据获取等值面的方法(MarchingCube)
  3. BZOJ 1085 骑士精神
  4. 如何提高Python计算浮点数的精度(如何解决Python中浮点数计算误差问题)
  5. 语雀知识库 2.0 上线,让表达更自由
  6. NSA/SA手机都是真5G 用户已购5G手机不受明年政策影响
  7. apache2 启动、重启、停止方法
  8. Web安全 -- 信息收集(上)
  9. 10 模拟SPI驱动PS2无线手柄
  10. 解压上传zip文件并获取excel表数据