您现在的位置是:首页 > 正文

Qt-QPixmap

2024-01-30 22:12:16阅读 0

QPixmap类用于绘图设备的图像显示,它即可以作为一个绘图对象,也可以加载到一个控件中,通常是标签或按钮,用于在标签或按钮上显示图像。

QPixmap可以读取的图像文件类型有BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM等 

QPixmap与QImage的区别:

QPixmap依赖于硬件,QImage不依赖于硬件

QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的

当图片小的情况下,直接用QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用QPixmap进行加载,会占很大的内存,一般一张几十K的图片,用QPixmap加载进来会放大很多倍,所以一般图片大的情况下,用QImage进行加载,然后转乘QPixmap用户绘制。QPixmap绘制效果是最好的

#include <QPixmap>

载入图像和显示

QLabel* label=new QLabel(this);
    label->move(10,10);
    label->resize(500,500);

    QPixmap pm("./ma.jpg"); //创建QPixmap对象并读取图像
    QPixmap p;    //创建QPixmap对象
    p.load("./laohu.jpg");  //载入图像
    //重复load同一图像时,容易出错,解决办法看:https://blog.csdn.net/doupi2008/article/details/44960003/


    label->setPixmap(p); //在label标签中显示图像
    label->adjustSize();

QPixmap(const QString &fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor);//从指定的文件中加载图像并生成QPixmap对象

参数2:format:字符串,表示图像文件的格式,如果为0,将进行自动识别

参数3:flags:表示颜色的转换模式

    1) Qt::AutoColor:由系统自动决定。

    2) Qt::ColorOnly:彩色模式。

    3) Qt::MonoOnly:单色模式

常用操作

QLabel* label=new QLabel(this);
    label->move(10,10);
    label->resize(400,400);
    QLabel* label1=new QLabel(this);
    label1->move(450,10);
    label1->resize(400,400);

    QPixmap p("./ma.jpg");


    QRect r=QRect(150,150,300,300);
    QPixmap p1=p.copy(r);  //返回指定区域的图像
    QPixmap p2=p.copy(150,150,300,200);  //返回指定区域的图像
    p1.save("./ss.jpg");  //保存图像

    //p2.fill(QColor(0,0,255));  //用给定的颜色填充pixmap
    //默认:Qt::white

    bool b=p2.hasAlpha();  //如果此pixmap有alpha通道或有掩码,则返回true,否则返回false
    int n=p2.height();  //返回图像的高
    n=p2.width();   //返回图像的宽
    QSize s1=p2.size();//返回图像的宽高
    b=p2.isNull(); //如果这是空的pixmap,则返回true;否则返回false
    //空pixmap具有零宽度、零高度和无内容。不能在空pixmap中绘制

    QSize s(200,100);
    QPixmap p3=p2.scaled(s);//将p2缩放成指定大小,然后返回新图像

    QPixmap p4=p1.scaled(s,Qt::KeepAspectRatio);  //缩放图像
    /*
    参数2:可选
    IgnoreAspectRatio 默认 矩形框有多大,图片就缩放成多大,不限制原图片的长宽比
     KeepAspectRatio    保持原图片的长宽比,且不超过矩形框的大小
     KeepAspectRatioByExpanding   根据矩形框的大小最大缩放图片
     参数3:可选
     Qt::FastTransformation  默认  转换快速执行,没有任何平滑处理
     Qt::SmoothTransformation   使用双线性滤波对生成的图像进行转换
     */

    p4=p1.scaledToHeight(200);  //按照高度缩放
    /*
    参数2:可选
     Qt::FastTransformation  默认  转换快速执行,没有任何平滑处理
     Qt::SmoothTransformation   使用双线性滤波对生成的图像进行转换
     */

    p4=p1.scaledToWidth(200);  //按照宽度缩放
    /*
    参数2:可选
     Qt::FastTransformation  默认  转换快速执行,没有任何平滑处理
     Qt::SmoothTransformation   使用双线性滤波对生成的图像进行转换
     */

    QImage im=p1.toImage();  //将QPixmap对象转换为QImage对象
    //fromImage()   将QImage对象转换为QPixmap对象

    QTransform tf;  //坐标变换
    tf.rotate(30.5,Qt::YAxis);
    //参数1:旋转角度
    //参数2:旋转轴   Qt::XAxis    Qt::YAxis   Qt::ZAxis默认

    QPixmap p5=p4.transformed(tf,Qt::FastTransformation); //返回旋转后的图像
    /*
参数1:旋转角度  正数:顺时针     负数:逆时针
参数2:Qt::FastTransformation  默认  变换执行迅速,无需平滑
    Qt::SmoothTransfor               利用双线性滤波对得到的图像进行变换
    */


    qDebug()<<s1;
    label->setPixmap(p1); //在label标签中显示图像
    label->adjustSize();
    label1->setPixmap(p5);
    label1->adjustSize();

作为绘图设备

QLabel* label=new QLabel(this);
    label->move(10,10);
    label->resize(400,400);
    QPixmap p(300,300); //创建QPixmap空白图像对象
    //参数:图像大小
    QPainter painter(&p); //创建画家
    //参数:绘图设备
    painter.fillRect(100,100,100,50,Qt::blue);//在pix上绘制正方形


    label->setPixmap(p); //在label标签中显示图像
    label->adjustSize();

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

网站文章

  • Mongo String类型日期转ISODate类型

    在mysql数据库导出的csv文件里的数据导入到mongodb数据库中, 发现日期数据是String,想要专为mongo的ISODate,方便以后的关于时间的查询。 以users表为例 方法一:少量数...

    2024-01-30 22:12:07
  • 定义可变参数的宏

    定义可变参数的宏

    像printf类的函数,如果代码中的比较多,且需要检查返回值时,没用到一个地方就添加一段返回值检查会比较烦,不添加,如果要求pclint扫描时会报warning 514。 为了方便,有两种方式,一种是...

    2024-01-30 22:11:59
  • 单表查询student表和score

    单表查询student表和score

    Sutdent 表的定义字段名 字段描述 数据类型 (主键 外键 非空 唯一 自增)Id 学号 INT(10) 是否是是是Name 姓名 VARCHAR(20) 否否是否否Sex 性别 VARCHAR...

    2024-01-30 22:11:29
  • 宽度的100%和auto的区别

    前段时间做项目,发现分不清width设为100%和auto的区别,实在是太水了,就查了点资料,做个总结,有不对的地方欢迎大家指出。 width:auto 块级元素默认的宽度值。看一下MDN上的解释:The browser will calculate and select a width for the specified element.大意是浏览器会自己选择一个合适的宽度值,那么...

    2024-01-30 22:11:22
  • 股票配对交易策略-最小距离法

    股票配对交易策略-最小距离法

    策略配对交易( Pairs Trading)为这种困境提供了一种既能避险又盈利的策略,其又被称之为价差交易或者统计套利交易,是一种风险小、收益较稳定的市场中性策略。一般的做法,是在市场中寻找两只历史价...

    2024-01-30 22:11:15
  • 创建型设计模式(6种)学习

    创建型设计模式(6种)学习

    Linux服务器开发/后台架构师知识体系整理 创建型设计模式有: 共6种 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract F...

    2024-01-30 22:10:46
  • JS中的遍历循环

    JS中的遍历循环

    Object.keys(obj):参数:要返回其枚举自身属性的对象。返回值:一个表示给定对象的所有可枚举属性的数组。对象:返回可枚举的属性数组。var obj = { 'name' : 'zhangsan', 'age' : '18', 'language' : [1,[2,3],[4,5]], "fun":function(str){ ...

    2024-01-30 22:10:38
  • Dubbo 远程调用过程

    Dubbo 远程调用过程

    Dubbo远程调用过程。

    2024-01-30 22:10:32
  • Ubuntu中apache2(httpd)安装、httpd实现网页图片的挂载

    Ubuntu中apache2(httpd)安装、httpd实现网页图片的挂载

    一、apache2软件包安装和开启 (1)apache2安装 sudo apt-get update sudo apt-get install apache2 (2)apache2的开启 命令:sud...

    2024-01-30 22:10:25
  • Window.open()方法参数详解

    1, 最基本的弹出窗口代码 window.open(&#39;page.html&#39;);2, 经过设置后的弹出窗口 window.open(&#39;page.html&#39;, &#39;n...

    2024-01-30 22:09:56