Qt扫盲-QPixmap理论总结

news2024/11/16 15:28:06

QPixmap 理论总结

  • 一、概述
  • 二、读写 Image 文件
  • 三、Pixmap 像素图信息
  • 四、Pixmap 格式转换
  • 五、Pixmap 像素转换

一、概述

QPixmap 也是一个用得很多的描述图像的类,也是界面显示相关的时候用得很多的。

QPixmap类是一个可以用作绘画设备的屏幕外图像表示。Qt提供了四个类来处理图像数据:QImage, QPixmap, QBitmap和QPicture。QImage是为I/O和直接的像素访问和操作而设计和优化的,而QPixmap是为在屏幕上显示图像而设计和优化的。QBitmap只是一个继承QPixmap的方便类,确保深度为1。如果QPixmap对象确实是位图,则isQBitmap()函数返回true,否则返回false。最后,QPicture类是一个绘图设备,用于记录和回放QPainter命令。

使用 QLabel 或 QAbstractButton 的子类之一(如 QPushButton 和 QToolButton )可以很容易地在屏幕上显示 QPixmap。QLabel 有一个像素图属性,而 QAbstractButton 有一个图标属性。

QPixmap对象可以按值传递,因为QPixmap类使用隐式数据共享。有关更多信息,请参阅隐式数据共享文档。QPixmap对象也可以流式传输,也就是可以序列化,这个类也是Qt默认支持序列化的一个类。

注意,像素图中的像素数据是内部的,由底层窗口系统管理。因为QPixmap是QPaintDevice的子类,QPainter可以用来直接在像素图上绘图。像素只能通过QPainter函数或将QPixmap转换为QImage来访问。但是,fill()函数可用于初始化具有给定颜色的整个像素图,其实就是填充图像嘛。

有一些函数可以在QImage和QPixmap之间转换。通常,QImage类用于加载图像文件,在QImage对象转换为要在屏幕上显示的QPixmap之前,可以选择操作图像数据。或者,如果不需要任何操作,则可以将图像文件直接加载到QPixmap中。

QPixmap提供了一组函数,可用于获取有关像素图的各种信息。此外,还有几个函数可以实现像素图的转换。

二、读写 Image 文件

QPixmap提供了几种读取图像文件的方法:文件可以在构造QPixmap对象时加载,也可以稍后使用 load()loadFromData() 函数加载。在加载映像时,文件名可以引用磁盘上的实际文件,也可以引用应用程序的一个嵌入式资源。有关如何在应用程序的可执行文件中嵌入图像和其他资源文件的详细信息,请参阅Qt资源系统概述。

只需调用 save() 函数来保存QPixmap对象。

QPixmap pixmap;
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format

支持的文件格式的完整列表可通过 QImageReader::supportedImageFormats() 和 QImageWriter::supportedImageFormats() 函数获得。新的文件格式可以作为插件添加。

默认情况下,Qt支持以下格式,在save()函数的时候可以传递这些名称:

格式描述Qt的支持情况
BMPWindows BitmapRead/write
GIFGraphic Interchange Format (optional)Read
JPGJoint Photographic Experts GroupRead/write
JPEGJoint Photographic Experts GroupRead/write
PNGPortable Network GraphicsRead/write
PBMPortable BitmapRead
PGMPortable GraymapRead
PPMPortable PixmapRead/write
XBMX11 BitmapRead/write
XPMX11 PixmapRead/write

三、Pixmap 像素图信息

QPixmap提供了一组函数,可以用来获取关于像素图的各种信息:

  • Geometry 几何
    size(), width()和height()函数提供有关像素图大小的信息。函数的作用是:返回图像的外围矩形。
  • alpha 信息
    如果像素图具有alpha通道的格式,则 hasphachannel() 返回 true,否则返回 false。hasAlpha(), setMask() 和 mask() 函数是遗留的,不应该使用。它们可能非常缓慢。createHeuristicMask()函数为这个像素图创建并返回一个1-bpp的启发式掩码(即一个QBitmap)。它的工作原理是从一个角落选择一种颜色,然后从所有的边缘开始,削去该颜色的像素。createMaskFromColor()函数根据给定的颜色为像素图创建并返回一个掩码(即QBitmap)。
  • 低层次的信息
    depth()函数的作用是:返回像素图的深度。defaultDepth() 函数返回默认深度,即应用程序在给定屏幕上使用的深度。
    cacheKey()函数返回一个唯一标识QPixmap对象内容的数字。

四、Pixmap 格式转换

QPixmap对象可以使用toImage()函数转换为 QImage。同样,QImage也可以使用 fromImage() 转换为 QPixmap。

如果这个操作太麻烦,你可以使用 QBitmap::fromImage()代替。

要将 QPixmap 转换为HICON或从HICON转换,可以分别使用 QtWinExtras 函数 QtWin::toHICON() 和 QtWin::fromHICON()。

五、Pixmap 像素转换

QPixmap支持许多用于创建新像素图的函数,该像素图是原始像素图的转换版本:

其实就是一些缩放,在给一些控件设置图标的时候,使用这些函数就显得非常有必要

scaled(), scaledToWidth()和scaledToHeight() 函数返回缩放后的像素图副本,而 copy() 函数创建的QPixmap是原始像素图的普通副本。

scaled()函数的定义如下:

QPixmap QPixmap::scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const

使用 aspectRatioMode 和 transformMode指定的纵横比和转换模式,将像素图缩放到给定的大小。
在这里插入图片描述

  • 如果aspectRatioMode为Qt::IgnoreAspectRatio,则像素图缩放到大小。
  • 如果aspectRatioMode是Qt::KeepAspectRatio,像素图被缩放到尽可能大的矩形内部大小,保留长宽比。
  • 如果aspectRatioMode是Qt:: keepaspectratiobyexpansion,像素图被缩放成一个尽可能小的矩形,保持长宽比。

如果给定的大小为空,则此函数返回空像素图。

在某些情况下,使用比例设置来绘制像素图比缩放像素图更有益。例如,当Painter基于OpenGL或比例因子快速变化时,就会出现这种情况。

transform()函数返回用给定的变换矩阵和变换模式变换的像素图的副本:在内部,变换矩阵被调整以补偿不需要的转换,即transforms()返回包含原始像素图的所有变换点的最小像素图。

静态truemmatrix()函数返回用于转换像素图的实际矩阵。

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

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

相关文章

文生图——DALL-E 3 —论文解读——第一版

概述 本文主要是DALLE 3官方第一版技术报告(论文)的解读,原文《Improving Image Generation with Better Captions》论文解读。该文要提升文生图的效果,将技术点放到了,提升指令跟随能力上,然后顺藤摸瓜分为…

Linux下挂载大于2T的硬盘

fdisk和gdisk命令的区别 fdisk和gdisk命令都可以给磁盘分区,但是在公司里,如果磁盘大于2T,不能用fdisk分区,只能用gdisk命令分区。 gdisk可以分128个主分区,用gdisk分区没有逻辑分区和扩展分区之说,只有主…

【FPGA零基础学习之旅#17】搭建串口收发与储存双口RAM系统

🎉欢迎来到FPGA专栏~搭建串口收发与储存双口RAM系统 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误&#xff0…

超声波清洗机品牌哪些好用?好评不断的超声波清洗机推荐

超声波清洗机目前的使用范围逐渐变广,一开始超声波清洗机只出现在大型的工业领域中的零件清洗,逐渐衍生到现在,出现了小型的超声波清洗机,可以让大家可以在家也使用上超声波清洗机。眼镜是现在大部分都离不开视线辅助的一个工具&a…

越流行的大语言模型越不安全

源自:GoUpSec “人工智能技术与咨询” 发布 安全研究人员用OpenSSF记分卡对GitHub上50个最流行的生成式AI大语言模型项目的安全性进行了评估,结果发现越流行的大语言模型越危险。 近日,安全研究人员用OpenSSF记分卡对GitHub上50个最流…

Powershell脚本自动备份dhcp数据库

文章目录 为什么要备份DHCP数据库呢?在PowerShell中自动备份DHCP数据库1,创建备份目录2,判断备份路径是否存在3,备份DHCP数据库4,完整自动备份脚本5,安排定期备份 推荐阅读 为什么要备份DHCP数据库呢&#…

故障解析丨Clone节点导致主从故障

1.背景概述 在一次主从复制架构中,由于主节点binlog损坏,导致从节点无法正常同步数据,只能重做从节点;因此使用MySQL 8.0.17开始提供的clone技术进行恢复,恢复后的2天都发生了主从报错数据冲突。 通过解析binlog发现…

网页轮播图

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>纯CSS实现轮播图(自动轮播)</title><style&…

Warning: ‘Destination Folder‘ contains 1 space.【Anaconda安装】

报错内容如下&#xff1a; 意思就是说你的安装路径下不要有空格哈哈&#xff0c;有空格就不行&#xff0c;比如&#xff1a; "D:\Program Files\Anaconda3"中间就有空格&#xff0c;Program与Files之间。 换个路径&#xff0c;例如&#xff1a; 就可以了。

EmbedChain:比LangChain更加轻量化的LLM框架

一、前言 在之前的文章中&#xff0c;我们研究了如何使用LangChain结合大型语言模型&#xff08;LLM&#xff09;API来构建用户友好且直观的聊天机器人。现在&#xff0c;我们将探索一个新的Python包来进一步简化LangChain的实现。只需3-4行代码&#xff0c;我们就可以轻松地与…

Runner GoUI自动化测试发布

构建自动化测试体系是当下每个项目团队愿意去做的&#xff0c;自动化测试减少重复操作节省人力成本。 RunnerGo UI自动化平台 RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块&#xff0c;覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selen…

APUS入驻百度灵境矩阵,普惠AI大模型插件能力

10月17日&#xff0c;APUS出席百度世界大会2023。会上&#xff0c;百度公布了灵境矩阵业务进展&#xff0c;APUS作为灵境矩阵首批合作伙伴正与百度携手拓展大模型能力边界、构建大模型应用生态。 百度认为&#xff0c;大模型将繁荣AI应用生态&#xff0c;在生态搭建过程中&…

springboot maven项目环境搭建idea

springboot maven项目环境搭建idea 文章目录 springboot maven项目环境搭建idea用到的软件idea下载和安装java下载和安装maven下载和安装安装maven添加JAVA_HOME路径&#xff0c;增加JRE环境修改conf/settings.xml&#xff0c;请参考以下 项目idea配置打开现有项目run或build打…

uview 1 uni-app表单 number digit 的输入框有初始化赋值后,但是校验失败

背景&#xff1a; 在onReady初始化规则 onReady() { this.$refs.uForm.setRules(this.rules); }, 同时&#xff1a;ref,model,rules,props都要配置好。 报错 当input框限定type为number&#xff0c;digit类型有初始值不做修改动作,直接提交会报错&#xff0c;验…

仿美团外卖微信小程序源码/美团外卖优惠券领劵小程序-自带流量主模式

源码简介&#xff1a; 仿美团外卖微信小程序源码&#xff0c;它是美团外卖优惠券领劵小程序&#xff0c;还自带流量主模式。可以领取外卖优惠券的小程序。实用方便。 美团优惠券小程序带举牌小人带菜谱流量主模式&#xff0c;挺多外卖小程序的&#xff0c;但是都没有搭建教程…

Leetcode每日一题6.05:二叉树搜索树BST

二叉搜索树&#xff08;BST&#xff09; 根节点大于等于左子树所有节点&#xff0c;小于等于右子树所有节点。 二叉搜索树中序遍历即为节点从小到大排序。 230. 二叉搜索树中第K小的元素 题目描述&#xff1a; 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &a…

tcpdump 异常错误

tcpdump 进行抓包的时候&#xff0c;-w 提示 Permission denied&#xff1a; sudo tcpdump -w test1.log tcpdump: test1.log: Permission denied 开始以为是用户权限的问题&#xff0c;后来换用 root 账户还是不行&#xff0c;经搜索&#xff0c;是 AppArmor 的问题。 解决方…

一台服务器成了哆啦A梦的神奇口袋

如果我有一台服务器&#xff0c;那简直就像打开了哆啦A梦的神奇口袋&#xff01;可以做的事情可太多啦&#xff0c;比如&#xff1a; 学习和探险 首先嘛&#xff0c;当然是用来学习和探险啦&#xff01;我可以安装和配置各种操作系统、编程语言和工具&#xff0c;深入了解计…

优优嗨聚集团:美团外卖,让美好儿童餐计划触手可及

在当今这个快节奏的社会&#xff0c;父母们对于孩子的饮食健康越来越关注。如何让孩子吃得健康、吃得安心&#xff0c;是每一个家长都非常关心的问题。而美团外卖&#xff0c;作为中国最大的外卖平台之一&#xff0c;一直在积极推动美好儿童餐计划&#xff0c;让家长们能够更方…

docker(2)部署前后端分离springboot+vue项目

前置知识 虚拟网桥 docker容器需要在同一个网段才能通信&#xff0c;当启动一个容器时会自动连接一个docker中默认网桥段但此默认网桥段非本容器固定&#xff0c;当下次容器启动分配的ip会变&#xff0c;并且不可用名称直接访问。 自定义网段将需要互通的容器放入&#xff0c…