图像处理QPixmap、Picture、QBitmap

news2024/10/6 16:26:40

QPixmap 类是一种可用作绘制设备的屏幕外图像表示形式。

QPixmap可以使用QLabel或QAbstractButton的子类之一可以轻松显示在屏幕上

QPixmap 对象可以按值传递,因为 QPixmap 类使用隐式数据共享,也可以流式传输。

QPixmap可以和QImage之间进行转换:

  • QPixmap 转  QImage     使用 toImage函数
  • QImage   转  QPixmap   使用QPainter::fromImage

构造函数:

 常用函数:

size()图像大小
width()宽度
height()高度
toImage()转换为QImage
setDevicePixeRatio()设置像素映射的设备像素比率
scroll()滚动矩阵
scaled()对图像进行缩放
load()打开文件
save()保存文件
fill()填充
depth()图像深度
setMask()使用

QPximap在label中的使用:(其他按键控件也可使用)

    QLabel *label=new QLabel(this);
    label->resize(303,303);//设置大小
    QPixmap pixmap(":/image/456.png");
    pixmap.scaled(label->width(),label->height());
    label->setPixmap(pixmap);

QPixmap可以和QImage之间的转换

void Widget::paintEvent(QPaintEvent *event)
{
   QPainter painter(this);
   QImage image("D:/456.png");
   image.setDevicePixelRatio(3);
   painter.drawImage(0,0,image);
   QPixmap pixmap=QPixmap::fromImage(image);//QImage转QPixmap
   painter.drawPixmap(100,100,pixmap);
   painter.drawImage(200,200,pixmap.toImage());//QPixmap转QImage
}

QPixmap的一些函数使用:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pixmap("D:/456.png");
    qDebug()<<pixmap.size();//图片大小
    qDebug()<<pixmap.width();//图片宽度
    qDebug()<<pixmap.height();//图片高度
    qDebug()<<pixmap.depth();//图片深度
    pixmap.scaled(400,400);//缩放
    pixmap.fill(Qt::gray);//设置填充
    painter.drawPixmap(0,0,pixmap);
}

setMask的使用:遮罩

实现不规则窗体,鼠标右键窗体关闭窗口,左键长按可以拖动窗口

widget.h文件添加:

protected:
    void paintEvent(QPaintEvent *event);//画家事件
    void mousePressEvent(QMouseEvent *event);//鼠标点击事件
    void mouseMoveEvent(QMouseEvent *event);//鼠标移动事件
    QPoint point;//点位

widget.cpp中实现:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pixmap(":/image/456.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
    this->setMask(pixmap.mask());//需要添加头文件#include<QBitmap>
}
void Widget::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::RightButton)//右键点击  关闭窗口
    {
        close();
    }
    point=event->globalPos()-frameGeometry().topLeft();//获取差值
    event->accept();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons()&Qt::LeftButton)
    {
        move(event->globalPos()-point);
        event->accept();
    }

}

QPixmap绘制图像:

QPixmap的底色默认为黑色,可以自己使用fill()添加底色。

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QPixmap pixmap(200,200);//设置图片大小
    painter.begin(&pixmap);//给pixmap绘制
    painter.setPen(Qt::red);
    painter.setBrush(Qt::cyan);
    painter.drawRect(0,0,100,100);
    painter.drawEllipse(100,100,100,100);
    painter.end();
    painter.begin(this);
    painter.drawPixmap(100,100,pixmap);

}

 QPicture

QPicture 类是一种绘制设备,用于记录和重播QPainter命令。QPicture与分辨率无关,即QPicture可以显示在不同的设备上

 QPicture绘制图形:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QPicture picture;
    painter.begin(&picture);
    painter.drawRect(0,0,100,100);
    painter.drawEllipse(100,100,100,100);
    painter.end();
    painter.begin(this);
    painter.drawPicture(0,0,picture);
   
}

 重播图片:

注意重播只能使用.pic文件

 先绘制一个图形,保存为.pic文件

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QPicture picture;
    painter.begin(&picture);
    painter.drawEllipse(100,100,100,100);
    painter.end();
    picture.save("D:/picture.pic");
    painter.begin(this);
    painter.drawPicture(0,0,picture);  
}

然后进行重播

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QPicture picture;
    picture.load("D:/picture.pic");
    painter.begin(this);
    painter.drawPicture(0,0,picture);
}

QBitmap

QBitmap 类是一种单色屏幕外绘画设备,主要用于创建自定义QCursor和QBrush对象、构造QRegion对象以及为像素图和小部件设置蒙版。

QBitmap绘制图形:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QBitmap bitmap(200,200);
    painter.begin(&bitmap);
    painter.setBrush(Qt::cyan);
    painter.drawRect(0,0,100,100);
    painter.end();
    painter.begin(this);
    painter.drawPixmap(0,0,bitmap);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【关于lombok框架一文秒懂】

目录 1. Lombok框架 2. 安装lombok插件 1. Lombok框架 Lombok框架是用于在编译期自动生成相关代码的&#xff0c;例如&#xff1a;Setters & Getters、hashCode()、equals()、toString()、无参数构造方法、全参数构造方法等。 相关的注解有&#xff1a; Data&#xff1…

python中的编码格式

1- 字符集和编码 1&#xff09; 初代编码 – ASCII 1- 物理机与电脑的交互&#xff1a;物理机中有个组件叫二极管&#xff0c; 可以通过电流通过二极管显示的高电平和低电平来记录信号。 2- 二极管的高电平和低电平则被计算机解读为0 和 1 3- 多个0和1拼接起来成为了二进制数据…

自动化测试框架设计原理详解

一、自动化测试场景 1、测试四象限 并不是所有测试类型都适合自动化。哪些测试更适合自动化?哪些更适合手工测试? 根据Brain Marick提出的测试四象限,我们可以对测试进行归类,将其划分到4个象限中,以解答这些问题,如下图所示。 第一象限:面向技术和指导开发,该象限中…

ActivityPub 笔记

ActivityPub 协议是一个去中心化的社交网络协议&#xff0c;其基于 ActivityStreams 2.0 数据格式。 在 ActivityPub 协议里&#xff0c;一个用户在服务器上的角色为“参与者&#xff08;actor&#xff09;”。用户在不同的服务器上的角色为不同的“参与者”。每一名“参与者”…

LSTM和GRU

LSTM和GRU RNN的优缺点 优点&#xff1a; 可以捕获序列之间的关系&#xff1b;共享参数。 缺点&#xff1a; 存在梯度消失和梯度爆炸问题&#xff1b;RNN的训练是一个比较困难的任务&#xff1b;无法处理长序列问题。 LSTM LSTM可以处理长序列问题&#xff0c;同样在之前…

openssl做文件处理(base64,MD5,sha256等)

这次使用openssl&#xff0c;发现openssl不仅可以用来做加密和解密&#xff0c;实际上也可以用来做文件的处理&#xff0c;比如base64转码、解码&#xff0c;文件md5的计算等。实现这些&#xff0c;即可以从命令行去做&#xff0c;也可以通过代码去实现。 1. 命令行操作 1. ba…

【ML特征工程】第 5 章 :分类变量:机器鸡时代的鸡蛋计数

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

想做副业没有方向,这三条告诉你什么是副业思维

怎样副业赚钱&#xff1f;教你几招&#xff0c;掌控自己的固有思维 你了解钱是怎么来的吗&#xff1f;你如果弄不懂这一点&#xff0c;你也是很难赚到钱的。 钱不是苦的&#xff0c;辛苦努力挣的基本都是一点钱。 假如将你的工作时长换为钱&#xff0c;你可以清晰地赚多少钱…

Java并发-线程上下文切换与死锁

理解线程的上下文切换 概述&#xff1a;在多线程编程中&#xff0c;线程个数一般都大于 CPU 个数&#xff0c;而每个 CPU 同一时&#xff0d;刻只能被一个线程使用&#xff0c;为了让用户感觉多个线程是在同时执行的&#xff0c; CPU 资源的分配采用了时间片轮转的策略&#x…

javacc之路0--- 安装与使用

官网&#xff1a; https://javacc.github.io/javacc/ https://github.com/javacc/javacc#getting-started 安装 下载解压 执行&#xff1a; mvn package 将 javacc-7.0.10.jar 重命名为 javacc.jar 并将目录下的scripts文件夹加入到环境变量中。 执行javacc命令验证是否成功…

【Qt 按钮】QPushButton所有函数和样式

【Qt 按钮】QPushButton所有函数和样式一、QSS语句 &#xff08;界面样式大全&#xff09;二、 构造函数三、Geometry &#xff08;获取属性&#xff09;四、 QFont五、setFont六、text七、setText八、move九、resize十、adjustSize[按钮自动适应文本大小]十一、setFocus十二、…

【附源码】计算机毕业设计JAVA预约健身私教网站

【附源码】计算机毕业设计JAVA预约健身私教网站 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

开发人员为什么要写测试用例?

作为一名开发人员&#xff0c;你可能会发现周围的开发并不太喜欢写测试用例&#xff0c;甚至有些同学根本不写测试用例&#xff0c;认为写测试用例完全是浪费时间&#xff0c;或者是测试用例只是测试的事情。 在开发过程中&#xff0c;往往都是呼啦啦的写完代码&#xff0c;然后…

【负荷预测、电价预测】基于神经网络的负荷预测和价格预测附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

别人熬夜看世界杯 我熬夜改代码 你满意了

2022年卡塔尔世界杯正如火如荼地进行着&#xff0c; 一边是热火朝天的比赛&#xff0c;一边是让人惊掉下巴的爆冷结局&#xff0c; 但正因为这些不确定因素&#xff0c;反倒让世界杯增添了几分魅力和乐趣&#xff01; 小编在看球赛的过程中&#xff0c;不禁起了联想&#xff…

Django+Vue中文件的上传和下载

场景&#xff1a;上传一个源数据Excel文件&#xff0c;然后根据数据处理生成另外一个Excel文件并支持下载 Django&#xff1a; 1.首先在Django的settings.py文件中增加配置 MEDIA_URL /media/ MEDIA_ROOT os.path.join(BASE_DIR, media)2.项目的urls.py中增加 url(r^medi…

环境主题静态HTML网页作业作品 大学生环保网页设计制作成品 简单DIV CSS布局网站

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

百度智能云与实体经济“双向奔赴”: 一场1+1>2的双赢

实体经济&#xff0c;已经成为检验科技企业潜力的试金石。 在最近的财报季中&#xff0c;各家大厂的财报里“实体经济”都是关键字眼&#xff0c;已经成为各家心照不宣的共同目的地。 当然&#xff0c;条条大路通罗马。每一家的战略思路和打法都不一样。11月22日&#xff0c;…

Centos7下新硬盘的挂载操作

1、查看当前硬盘使用情况 df -h 2、 查看磁盘分配情况 fdisk -l 如图所示 vdb 磁盘 还未被使用&#xff0c;现在开始分配。 3、 磁盘分配 使用m查看详细命令&#xff0c;n添加一块新分区&#xff0c;默认最多只能有四个主分区&#xff0c;但可以通过设置将第…

Web前端开发技术课程大作业,期末考试HTML+CSS+JavaScript电竞游戏介绍网站

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…