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

相关文章

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言