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

相关文章

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节