当前位置: 首页 > news >正文

qt5 传输 图片压缩_Qt 显示图片 放大 缩小 移动(都是QT直接提供的功能)

现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲。这里我们是利用QPixmap类来实现图片显示的。

一、利用QPixmap显示图片。

1.将以前的工程文件夹进行复制备份,我们这里将工程文件夹改名为painter05。(以前已经说过,经常备份工程目录,是个很好的习惯)

2.在工程文件夹的debug文件夹中新建文件夹,我这里命名为images,用来存放要用的图片。我这里放了一张linux.jpg的图片。如下图所示。

3.在Qt Creator中打开工程。(即打开工程文件夹中的.pro文件),如图。

4.将dialog.cpp文件中的paintEvent()函数更改如下。

void Dialog::paintEvent(QPaintEvent *)

{

QPainter painter(this);

QPixmap pix;

pix.load(“images/linux.jpg”);

painter.drawPixmap(0,0,100,100,pix);

}

这里新建QPixmap类对象,并为其添加图片,然后在以(0,0)点开始的宽和高都为100的矩形中显示该图片。你可以改变矩形的大小,看一下效果啊。最终程序运行效果如下。

(说明:下面的操作都会和坐标有关,这里请先进行操作,我们在下一节将会讲解坐标系统。)

二、利用更改坐标原点实现平移。

Qpainter类中的translate()函数实现坐标原点的改变,改变原点后,此点将会成为新的原点(0,0);

例如:

void Dialog::paintEvent(QPaintEvent *)

{

QPainter painter(this);

QPixmap pix;

pix.load(“images/linux.jpg”);

painter.drawPixmap(0,0,100,100,pix);

painter.translate(100,100); //将(100,100)设为坐标原点

painter.drawPixmap(0,0,100,100,pix);

}

这里将(100,100)设置为了新的坐标原点,所以下面在(0,0)点贴图,就相当于在以前的(100,100)点贴图。效果如下。

三、实现图片的缩放。

我们可以使用QPixmap类中的scaled()函数来实现图片的放大和缩小。

例如:

void Dialog::paintEvent(QPaintEvent *)

{

QPainter painter(this);

QPixmap pix;

pix.load(“images/linux.jpg”);

painter.drawPixmap(0,0,100,100,pix);

qreal width = pix.width(); //获得以前图片的宽和高

qreal height = pix.height();

pix = pix.scaled(width*2,height*2,Qt::KeepAspectRatio);

//将图片的宽和高都扩大两倍,并且在给定的矩形内保持宽高的比值

painter.drawPixmap(100,100,pix);

}

其中参数Qt::KeepAspectRatio,是图片缩放的方式。我们可以查看其帮助。将鼠标指针放到该代码上,当出现F1提示时,按下F1键,这时就可以查看其帮助了。当然我们也可以直接在帮助里查找该代码。

这是个枚举变量,这里有三个值,只看其图片就可大致明 白,Qt::IgnoreAspectRatio是不保持图片的长宽比,Qt::KeepAspectRatio是在给定的矩形中保持长宽比,最后一个也 是保持长宽比,但可能超出给定的矩形。这里给定的矩形是由我们显示图片时给定的参数决定的,例如 painter.drawPixmap(0,0,100,100,pix);就是在以(0,0)点为起始点的宽和高都是100的矩形中。

程序运行效果如下。

四、实现图片的旋转。

旋转使用的是QPainter类的rotate()函数,它默认是以原点为中心进行旋转的。我们要改变旋转的中心,可以使用前面讲到的translate()函数完成。

例如:

void Dialog::paintEvent(QPaintEvent *)

{

QPainter painter(this);

QPixmap pix;

pix.load(“images/linux.jpg”);

painter.translate(50,50); //让图片的中心作为旋转的中心

painter.rotate(90); //顺时针旋转90度

painter.translate(-50,-50); //使原点复原

painter.drawPixmap(0,0,100,100,pix);

}

这里必须先改变旋转中心,然后再旋转,然后再将原点复原,才能达到想要的效果。

运行程序,效果如下。

五、实现图片的扭曲。

实现图片的扭曲,是使用的QPainter类的shear(qreal sh,qreal sv)函数完成的。它有两个参数,前面的参数实现横行变形,后面的参数实现纵向变形。当它们的值为0时,表示不扭曲。

例如:

void Dialog::paintEvent(QPaintEvent *)

{

QPainter painter(this);

QPixmap pix;

pix.load(“images/linux.jpg”);

painter.drawPixmap(0,0,100,100,pix);

painter.shear(0.5,0); //横向扭曲

painter.drawPixmap(100,0,100,100,pix);

}

效果如下:

其他扭曲效果:

painter.shear(0,0.5); //纵向扭曲

painter.shear(0.5,0.5); //横纵扭曲

图片形状的变化,其实就是利用坐标系的变化来实现的。我们在下一节中将会讲解坐标系统。这一节中的几个函数,我们可以在其帮助文件中查看其详细解释。

http://www.cnblogs.com/hnrainll/archive/2011/05/24/2055766.html

相关文章:

  • linux中exp命令详解_linux 中 find 命令详解
  • 设计模式-单例模式
  • 5张表连接查询的优化_MySQL性能优化方案
  • ( 10 )MySQL中的外键
  • mysql 16384_MySQL性能优化
  • Hibernate的注解和检索
  • mysql tables()_Mysql中对table的操作问题
  • Java中各种集合(字符串类)的线程安全性!!!
  • linx 卸载mysql_Linux下卸载MySQL
  • mysql简单分表_mysql分表场景分析与简单分表操作
  • vue 条件渲染与列表渲染
  • vue select清空_Vue+Webpack开发可复用的单页面富应用教程(技巧篇)
  • 两个同级div等高布局
  • cant connect to local mysql_Can't connect to local MySQL server through socket
  • jQuery的切换函数(hover,toggle)
  • (三)从jvm层面了解线程的启动和停止
  • CSS 提示工具(Tooltip)
  • extjs4学习之配置
  • React Transition Group -- Transition 组件
  • Selenium实战教程系列(二)---元素定位
  • SpringBoot 实战 (三) | 配置文件详解
  • underscore源码剖析之整体架构
  • Vue学习第二天
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 半理解系列--Promise的进化史
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 后端_ThinkPHP5
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 老板让我十分钟上手nx-admin
  • 前言-如何学习区块链
  • 驱动程序原理
  • 想写好前端,先练好内功
  • 中文输入法与React文本输入框的问题与解决方案
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 我们雇佣了一只大猴子...
  • # 计算机视觉入门
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #pragma once与条件编译
  • (LeetCode) T14. Longest Common Prefix
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (多级缓存)缓存同步
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (区间dp) (经典例题) 石子合并
  • (算法设计与分析)第一章算法概述-习题
  • (转)关于多人操作数据的处理策略
  • .net Application的目录