利用QPixmap显示图片

我们来实现在窗口上显示图片,并将图片进行平移,缩放,旋转和扭曲。这里我是利用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是在给定的矩形中保持长宽比,最后一个Qt::KeepAspectRatioByExpanding也是保持长宽比,但可能超出给定的矩形。这里给定的矩形是由我们显示图片时给定的参数决定的,例如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); //横纵扭曲

图片形状的变化,其实就是利用坐标系的变化来实现的。

六、坐标系状态的保护。

我们可以先利用 save() 函数来保存坐标系现在的状态,然后进行变换操作,操作完之后,再用 restore() 函数将以前的坐标系状态恢复,其实就是一个入栈和出栈的操作。

例如:

void Dialog::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.save(); //保存坐标系状态
    painter.translate(100,100);
    painter.drawLine(0,0,50,50);

painter.restore(); //恢复以前的坐标系状态
    painter.drawLine(0,0,50,50);
}

利用QPixmap显示图片相关推荐

  1. QPixmap显示图片

    我们来实现在窗口上显示图片,并将图片进行平移,缩放,旋转和扭曲.这里我是利用QPixmap类来实现图片显示的. 一.利用QPixmap显示图片. 1.将以前的工程文件夹进行复制备份,我们这里将工程文件 ...

  2. QT 利用QPixmap复制图片

    记录一下,今天忘记这个用法了,想查资料不知道从哪里查起,结果就是差点气死,TMD 先选择把那个图片复制到那里去,这里是我的路径,你们的自己填,命名规则就是当前的日期. QDateTime curren ...

  3. Qt 显示图片 放大 缩小 移动

    本文章原创于www.yafeilinux.com 转载请注明出处. 现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲.这里我们是利用QPixmap类来实现图片显示的. 一.利 ...

  4. PyCharm pyqt5用label控件显示图片 QPixmap 串口通信指示灯

    import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPixmap imp ...

  5. Qt——P26 Label控件显示图片

    先把图片资源添加到Qt ui界面创建label //利用lable 显示图片ui->label_image->setPixmap(QPixmap(":/picture/abc.p ...

  6. 使用libjpeg库在LCD上显示图片

    背景: 网上已经有很多关于利用libjpeg显示图片的文章了,因此本文的技术含量不算高.本文是使用libjpeg的v8版本,在开发板的LCD上显示jpg格式图片,关于libjpeg,可到其官方网站下载 ...

  7. Unity3D之NGUI基础5:UISprite显示图片

    前文:https://blog.csdn.net/Jaihk662/article/details/86772807(NGUI图片管理工具AtlasMaker) 一.利用UISprite显示图片 第一 ...

  8. 利用opencv+QT打开并显示图片

    ``` // 利用opencv+QT打开并显示图片// 头文件在添加 #include "qlabel.h" // opencv #include <opencv2\core ...

  9. opencv java 显示图片_【opencv三】利用opencv读取显示图片

    在opencv中读取显示图片的头文件是highgui.hpp. 整体代码如下,如要测试自己的图片,需要将代码段中的图片地址更改为自己图片的绝对路径. #include "opencv2/hi ...

最新文章

  1. CSS3学习手记(1) 选择器
  2. HTTP文件浏览(静态文件+express4.x+md/code文件渲染)
  3. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
  4. 1个系统节拍 c语言_自己写的非抢占式嵌入式操作系统ATOS,全c语言,移植太......
  5. 一个报文的路由器之旅_【NE探秘】一个报文的路由器之旅
  6. .NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程
  7. 【渝粤教育】广东开放大学 文学创意写作 形成性考核 (58)
  8. 【Java】我的第一个 JAVA 程序:Hello,world!
  9. 用java制作心理测试软件_Java 程序员必备的10款开源工具
  10. 知名开源操作系统两大老板闹翻,一位联合创始人被迫退出,道一声:再见
  11. 普通人学python有啥用-普通人为什么要学习Python
  12. mybatis 原理_了解Mybatis的工作原理吗
  13. Redis 面试一定要知道的 3 个 问题!
  14. svga文件预览_Shu文件预览
  15. 图解十大经典机器学习算法
  16. cad怎么画立体图形教学_CAD画三维图中如何绘制三维实体
  17. Android添加拍照功能,Android开发实现拍照功能的方法实例解析
  18. 莫纳什大学计算机专业在哪个校区,莫纳什大学校区几个
  19. 电商项目_使用Quick BI 可视化工具进行展示
  20. 21 07 13学习总结

热门文章

  1. 新手必看:怎么写一个合格的测试用例?
  2. Excel[SQL]实现按日期累加
  3. java tess4j ddl_tess4j jna dll报错,求助
  4. C语言算法提高 陶陶摘苹果
  5. VUE2.0搭建H5项目
  6. Html将Json对象在页面结构化显示与Json文件生成下载
  7. 校园招聘攻略----嵌入式软件工程师基础问题(三)
  8. 为什么用scrum_为什么幼儿园的老师是最好的Scrum大师。
  9. JavaScript数组的定义及常用方法
  10. 支持图片扩展等AI功能,PS 2023 v24.5 安装教程