Qt 提供了四个用于处理图像数据的类:QImage, QPixmap, QBitmap and QPicture。
QPixmap可以很容易地显示在屏幕上,使用 QLabel 或QAbstractButton的子类之一(如 QPushButton 和 QToolButton)。QLabel 具有pixmap属性,而QAbstractButton具有 icon 属性。
QPixmap 对象可以按值传递,因为 QPixmap 类使用隐式数据共享。有关详细信息,请参阅 Implicit Data Sharing。QPixmap对象也可以流式传输。
请注意,像素图中的像素数据是内部的,并由底层窗口系统进行管理。因为QPixmap是 QPaintDevice 的子类,所以QPainte可以直接在像素图上绘制,像素只能通过QPainte函数或转换为QImage来访问。然而,但是,fill()函数可使用给定颜色初始化整个像素图。
有一些函数可以进行 QImage 和 QPixmap之间的转换。通常,QImage类用于加载图像文件,操作图像数据,然后将对象转换QPixmap以显示到屏幕上 。或者,如果不需要任何操作,则可以将图像文件直接加载到QPixmap中。
QPixmap提供一组函数,用于获取有关pixmap的各种信息。此外,还有几个函数可以实现像素图的转换。
读取和写入图像文件
QPixmap 提供了几种读取图像文件的方法:
1.可以在构造 QPixmap 对象时加载文件
2.可以稍后使用 load() 或 loadFromData()函数加载文件。
加载时,文件名可以引用磁盘上的实际文件,也可以引用应用程序的嵌入资源。有关如何在应用程序的可执行文件中嵌入图像和其他资源文件的详细信息,请参阅 The Qt Resource System 概述。
调用 save()函数即可保存 QPixmap 对象。
可通过 QImageReader::supportedImageFormats() 和 QImageWriter::supportedImageFormats()函数获得支持的文件格式的完整列表。新的文件格式可以添加为插件。默认情况下,Qt支持以下格式:
Format | Description | Qt's support |
---|---|---|
BMP | Windows Bitmap | Read/write |
GIF | Graphic Interchange Format (optional) | Read |
JPG | Joint Photographic Experts Group | Read/write |
JPEG | Joint Photographic Experts Group | Read/write |
PNG | Portable Network Graphics | Read/write |
PBM | Portable Bitmap | Read |
PGM | Portable Graymap | Read |
PPM | Portable Pixmap | Read/write |
XBM | X11 Bitmap | Read/write |
XPM | X11 Pixmap | Read/write |
Pixmap信息
QPixmap 提供了一组函数,可用于获取有关 pixmap 的各种信息::
Available Functions | |
---|---|
Geometry 几何特性 | size(), width() , height()函数提供有关像素图大小的信息。 rect()函数返回图像的封闭矩形。 |
Alpha component 透明通道 | 如果像素图的格式与 Alpha 通道相关, hasAlphaChannel() 返回真,否则返回假。 hasAlpha(), setMask() and mask() 是旧函数,不应使用,它们可能非常慢。 createHeuristicMask() 函数为此像素图创建并返回一个 1 bpp 启发式掩码(即 a)。它的工作原理是从其中一个角中选择一种颜色,然后从所有边缘开始削掉该颜色的像素。 createMaskFromColor() 函数根据给定的颜色为像素图创建并返回一个蒙版。 |
Low-level information 底层信息 | The depth() function returns the depth of the pixmap. The defaultDepth() function returns the default depth, i.e. the depth used by the application on the given screen. The cacheKey() function returns a number that uniquely identifies the contents of the QPixmap object. depth() 函数返回像素图的深度。 defaultDepth() 函数返回默认深度,即应用程序在给定屏幕上使用的深度。 |
Pixmap转换
QPixmap 对象可以使用toImage() 函数转换为 QImage 对象。同样,可以使用 fromImage()将 QImage 转换为 QPixmap。如果此操作成本太高,则可以改用QBitmap::fromImage()。
要将 QPixmap 与 HICON 相互转换,您可以分别使用 QtWinExtras 函数 QtWin::toHICON() 和 QtWin::fromHICON()。
Pixmap变换
QPixmap支持许多函数来创建新的像素图,该像素图是原始像素图的变换版本:
scaled(), scaledToWidth() 和 scaledToHeight() 函数返回像素图的缩放副本,而 copy()函数创建一个 QPixmap,它是原始像素图的普通副本。
transformed() 函数返回使用给定变换矩阵和变换模式进行变换的像素图的副本: 在内部,调整变换矩阵以补偿不需要的平移,即 transformed()返回包含原始像素图所有变换点的最小像素图。静态函数 trueMatrix() 返回用于转换像素图的实际矩阵。
参阅 QBitmap, QImage, QImageReader, and QImageWriter.