Qt扫盲-QPixmap理论总结

2023-10-27 01:45
文章标签 总结 qt 理论 扫盲 qpixmap

本文主要是介绍Qt扫盲-QPixmap理论总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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()函数返回用于转换像素图的实际矩阵。

这篇关于Qt扫盲-QPixmap理论总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/285883

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel