QPixmap主要用于绘图,针对图像显示而最佳化设计;

QImage主要是为图像I/O、图像访问及像素修改而设计。但若用QPixmap加载大图片的时候,会占用很大内存,适合加载小图片;一个几十K的图片,加载进来后会放大很多倍。

若图片过大,可用QImage进行加载,然后转成QPixmap用户绘制,QPixmap绘制效果最好。

1.使用QPixmap显示图片

void Dialog::paintEvent(QPaintEvent *)
{QPainter painter(this);QPixmap pix;pix.load(“D:/1.jpg”);painter.drawPixmap(0,0,50,50,pix); //在(0,0)点起始的宽高均为50的句型中显示图片painter.translate(50,50); //将起始点改为(50,50)painter.drawPixmap(0,0,50,50,pix); //在(50,50)起始的宽高为50的矩形中显示图片
}

2.使用QPixmap实现图片的缩放

可使用QPixmap类中的scaled()函数对图像进行放大或缩小。该函数可以根据指定的模式,返回按比例缩放为具有给定宽度和高度的矩形的大小。

void Dialog::paintEvent(QPaintEvent *)
{QPainter painter(this);QPixmap pix;pix.load(“D:/1.jpg”);painter.drawPixmap(0,0,50,50,pix); //在(0,0)点起始的宽高均为50的句型中显示图片qreal wid = pix.width(); //获取图像的宽高qreal hei = pix.height();pix = pix.scaled(wid*2,hei*2,Qt::KeepAspectRatio);//将图片宽高扩大两倍,且在矩形内保持宽高比值painter.drawPixmap(50,50,pix);
}

参数Qt::KeepAspectRatio,是图片缩放的方式,其含义在给定矩形中保持图片长宽比;

参数Qt::IgnoreAspectRatio,其含义是不保持图片长宽比;

参数Qt::KeepAspectRatioByExpanding,其含义是保持图片长宽比,但可能超出给定的矩形。

3.使用QPixmap实现图像的旋转

可使用QPainter类的rotate()函数实现图像旋转,其默认是以原点为中心进行旋转。

void Dialog::paintEvent(QPaintEvent *)
{QPainter painter(this);QPixmap pix;pix.load(“D:/1.jpg”);painter.translate(50,50); //将旋转中心改为(50,50)painter.rotate(90); //顺时针旋转90度painter.translate(-50,-50); painter.drawPixmap(0,0,50,50,pix);
}

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

4.使用QPixmap实现图像的扭曲

使用的QPainter类的shear(qreal sh,qreal sv)函数,可以实现图片的扭曲。参数1实现横行变形,参数2实现纵向变形。当它们的值为0时,表示不扭曲。

图像形状的变化是利用坐标系的变化实现的。

void Dialog::paintEvent(QPaintEvent *)
{QPainter painter(this);QPixmap pix;pix.load(“D:/1.jpg”);painter.drawPixmap(0,0,50,50,pix); painter.shear(0.5,0) ;//横向扭曲painter.drawPixmap(50,0,50,50,pix); painter.shear(0,0.5);//纵向扭曲painter.drawPixmap(0,50,50,50,pix); painter.shear(0.5,0.5);//同时横纵扭曲painter.drawPixmap(50,50,50,50,pix);
}

【QT5】QPixmap的使用相关推荐

  1. PySide2中使用QLabel的setPixmap方法显示图片,部分图片无法显示

    之前一直是用PyQt5的,最近的项目由于担心开源协议的问题,开始使用PySide2,没想到在简单的图片显示上就出现了问题. 问题的表现是这样的,对于有的.jpg图片,使用PyQt5是完全可以正常显示的 ...

  2. Qt5基础 Qimage与QPixmap的转换

    Qt5基础系列 Qt基础的学习笔记.此文章为在B站上学习黑马程序员Qt教程的Qimage与QPixmap之间的转换部分做的记录,加深理解,方便回看. 目录 Qt5基础系列 一.简介 二.Qimage与 ...

  3. Qt5.15.2 Cmake Clion下如何使用QPixmap显示JPG图片

    在Main.cpp的文件下,Main 函数的第一行加入: QApplication::addLibraryPath(R"(C:\Qt\5.15.2\mingw81_64\plugins)&q ...

  4. QT5实践:菜单窗口实现图像打开浏览、存盘

    一.从本代码中学到什么? 以下代码实现功能有: 1 菜单画出 2 菜单事件响应 3 文件对话框 4 显示图片 5 图片放大缩小 二. 实现代码 from PyQt5.QtCore import QDi ...

  5. qt 字体不随dpi_Windows – QT5字体渲染在各种平台上不同

    我想对某些自定义小部件渲染进行可重复的测试.为了做到这一点,我将它们绘制成一个Q Image,并将结果保存为PNG.与MacOSX相比,Windows的输出真的不同. 我照顾: >在所有平台上选 ...

  6. python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版

    给大家带来的一篇关于计算机视觉相关的电子书资源,介绍了关于OpenCV3.Qt5.计算机视觉.应用开发方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小117.2 MB,阿敏·艾哈迈迪·泰 ...

  7. QT5开发及实例学习之十七Qt5双缓冲机制

    文章目录 一.原理与设计 二.绘图区的实现 三.主窗口的实现 一.原理与设计   所谓双缓冲机制,是指在绘制控件时,首先将要绘制的内容绘制在一个图片中,再将图片一次性地绘制到控件上.在早期的 Qt 版 ...

  8. QT5开发及实例学习之十一Qt5文件操作功能

    文章目录 一.新建文件 二.打开文件 三.打印文件 1. 文本打印 2. 图像打印 一.新建文件   实现新建文件功能的函数 showNewFile() 如下: void ImgProcessor:: ...

  9. Ubuntu18.04中配置QT5.11开发环境

    准备工作 参考 https://wiki.qt.io/Install_Qt_5_on_Ubuntu . # 安装g++ sudo apt install build-essential # sudo ...

最新文章

  1. python any()和all()
  2. Navicat 复制多条数据
  3. java 一次CPU占用过高问题的排查及解决,java基础面试笔试题
  4. MFC笔记:初始化tab控件一点改进
  5. skala view android,Skala Preview for mac
  6. 简单的用堆栈实现的表达式计算
  7. itexpdf同一个段落不同文字,如何设置不同的格式
  8. uboot驱动模型(DM)分析(二)
  9. 【图像去噪】基于matlab GUI均值+中值+高斯低通+多种小波变换图像去噪【含Matlab源码 856期】
  10. 2018年下半年系统集成项目管理工程师真题及答案解析
  11. 一些模板(按字典序排序)
  12. Java 线程池常见误区
  13. 招行金葵花,经典白,银钻,AE白问题总结贴
  14. 151202storyboard中, 设置子控件和父控件的高宽比
  15. 小雷的冰茶几---3386
  16. springdatajpa之初识hibernate(一)
  17. NFS共享服务搭建详细流程
  18. 软文营销拒绝一成不变用故事建立情感依恋
  19. 2014中国CRM与商业IT展览会(上交会专题)
  20. html 英文自动换行,CSS让英文单词的自动换行

热门文章

  1. 女人都需要学会的四种气质
  2. Emotet银行木马新增提取电子邮件功能,分析能力升级
  3. Vue生命周期执行顺序
  4. egg.js开发 文章发布接口(图片上传)(表单数据接口)
  5. firebase 云推送_使用Firebase云消息传递在Android中推送通知
  6. 新计算机设置,请问新电脑怎样设置BIOS????
  7. RERAN:安卓系统的定时和点击的录制和回放——(5)
  8. 香港中文大学(深圳)李海洲/王本友教授招收大模型方向的博士生(2023Fall/2024SpringFall),研究助理和博后
  9. pwnable.kr之passcode
  10. Python 最简单的实例:手机通讯录