水之心
QPixmap 类是一种 off-screen 图像表示形式,可以用作绘画设备。使用 QLabel 或 QAbstractButton 的子类之一(例如 QPushButton 和 QToolButton ),可以轻松地在屏幕上显示 QPixmap 。 QLabel 具有 pixmap 属性,而 QAbstractButton 具有 icon 属性。
QPixmap
QLabel
QAbstractButton
QPushButton
QToolButton
pixmap
icon
由于 QPixmap 类使用隐式数据共享,因此可以按值传递 QPixmap 对象。有关更多信息,请参见隐式数据共享( Implicit Data Sharing )文档。 QPixmap 对象也可以流式传输。
请注意,pixmap 中的像素数据是内部的,并由基础窗口系统管理。由于 QPixmap 是 QPaintDevice 子类,因此 QPainter 可用于直接绘制到 pixmap 上。只能通过 QPainter 函数或将 QPixmap 转换为 QImage 来访问像素。但是, fill() 函数可用于以给定的颜色初始化整个像素图。
QPaintDevice
QPainter
QImage
fill()
有一些函数可以在 QImage 和 QPixmap 之间进行转换。通常,在将 QImage 对象转换为要在屏幕上显示的 QPixmap 之前,使用 QImage 类加载图像文件,并选择处理图像数据。或者,如果不需要任何操作,则可以将图像文件直接加载到 QPixmap 中。
QPixmap 提供了一组函数,这些函数可用于获取有关像素图的各种信息。另外,有几个函数可以转换像素图。
从给定 fileName 的文件构造一个 pixmap。如果文件不存在或格式未知,则像素图将成为空像素图(null pixmap)。加载程序尝试使用指定的 format 读取像素图。如果未指定 format (默认设置),则加载程序会在文件中探测标头以猜测文件格式。文件名可以引用磁盘上的实际文件,也可以引用应用程序的嵌入式资源之一。 有关如何在应用程序的可执行文件中嵌入图像和其他资源文件的详细信息,请参见 Resource System 。
fileName
format
如果需要修改图像以适应较低分辨率的结果(例如,从32位转换为8位),请使用 flags 来控制转换。
flags
fileName , format 和 flags 参数传递给 load() 。这意味着 fileName 中的数据未编译为二进制文件。如果 fileName 包含相对路径(例如,仅文件名),则必须找到相对于运行时工作目录的相关文件。
load()
使用给定的 width 和 height 构造一个像素图。如果 width 或 height 为零,则构造一个空的像素图。警告:这将创建一个带有未初始化数据的 QPixmap 。调用 fill() 以用适当的颜色填充像素图,然后使用 QPainter 对其进行绘制。
width
height
下面以 QLabel 为例子说明如何使用 QPixmap :
from xinet import QtWidgets, QtCore, QtGui from xinet.run_qt import run class Image(QtWidgets.QLabel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 创建一个空的 pixmap, 并设定其尺寸 self.pix = QtGui.QPixmap(300, 300) # 默认填充颜色为黑色 self.pix.fill('red') # 修改填充颜色为红色 self.setPixmap(self.pix) # 设定 QLabel 的 pixmap if __name__ == '__main__': run(Image) 3 读取和写入图像文件 QPixmap提供了几种读取图像文件的方式:构造QPixmap对象时可以加载该文件,或者稍后使用load()或loadFromData()函数来加载该文件。加载图像时,文件名可以引用磁盘上的实际文件,也可以引用应用程序的嵌入式资源之一。有关如何在应用程序的可执行文件中嵌入图片和其他资源文件的详细信息,请参见 Qt资源系统概述。 只需调用save()函数即可保存QPixmap对象。 可通过supportedImageFormats()和supportedImageFormats()函数获得受支持文件格式的完整列表。可以将新文件格式添加为插件。默认情况下,Qt支持以下格式: Qt 支持 使用 load() 从给定fileName的文件中加载像素图。如果成功加载了像素图,则返回 True;否则会使像素图无效并返回 False: from xinet import QtWidgets, QtCore, QtGui from xinet.run_qt import run class Image(QtWidgets.QLabel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.pix = QtGui.QPixmap() # 载入图片,如果成功加载了像素图,则返回`True`;否则会使像素图无效并返回 `False` self.pix.load('test.jpg') self.setPixmap(self.pix) if __name__ == '__main__': run(Image) save() 是一个重载函数。此函数使用指定的图像文件 format 和 quality 因数将QPixmap写入给定device。例如,这可以用于将像素图直接保存到QByteArray中: pixmap = QPixmap() byte_array = QtCore.QByteArray() buffer = QtCore.QBuffer(byte_array) buffer.open(QtCore.QIODevice.WriteOnly) pixmap.save(buffer, "PNG") # writes pixmap into bytes in PNG format 4 Pixmap 信息 QPixmap提供了一组函数,这些函数可用于获取有关 pixmap 的各种信息: 可能的函数 Alpha component 如果 pixmap 具有 alpha 通道的格式,则hasAlphaChannel()返回True,否则返回False。hasAlpha(),setMask()和mask()函数是旧函数,因此不应使用。它们可能非常慢。createHeuristicMask()函数为 pixmap 创建并返回一个 1-bpp 的启发式掩码(heuristic mask,即QBitmap)。它的工作原理是从任一角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。createMaskFromColor()函数根据给定的颜色为 pixmap 创建并返回一个掩码(即QBitmap)。 Low-level information depth()函数返回像素图的深度。defaultDepth()函数返回默认深度,即应用程序在给定屏幕上使用的深度。cacheKey()函数返回一个数字,该数字唯一标识QPixmap对象的内容。 createHeuristicMask([clipTight=true]) 创建并返回此像素图的启发式蒙版。该功能的工作原理是从任一角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。 如果clipTight为true(默认值),则遮罩足够大以覆盖像素; 否则,掩码大于数据像素。 遮罩(mask)可能并不完美,但应该合理,因此您可以执行以下操作: myPixmap = QPixmap() myPixmap.setMask(myPixmap.createHeuristicMask()) 此函数很慢,因为它涉及到QImage的转换以及非平凡的计算。可参考:createHeuristicMask()、createMaskFromColor()。 5 Pixmap Conversion 可以使用toImage()函数将QPixmap对象转换为QImage。同样,可以使用fromImage()将QImage转换为QPixmap。如果此操作过于昂贵,则可以改用fromImage()。 要将QPixmap与HICON相互转换,可以分别使用QtWinExtras函数QtWin::toHICON()和QtWin::fromHICON()。 6 Pixmap Transformations QPixmap支持许多用于创建新 pixmap 的功能,该新 pixmap 是原始 pixmap 的转换(transformed)版本:scaled(),scaledToWidth()和scaledToHeight()函数返回像素图的缩放副本,而copy()函数创建的QPixmap是原始像素图的纯副本。 transformd()函数返回使用给定的转换矩阵和转换模式转换的像素图的副本:在内部,调整转换矩阵以补偿不需要的平移,即transform()返回包含原始像素图的所有转换点的最小像素图。 静态trueMatrix()函数返回用于转换像素图的实际矩阵。 下列图像处理类也支持 Transformations 中的这些函数: QBitmap QImage QImageReader QImageWriter
QPixmap提供了几种读取图像文件的方式:构造QPixmap对象时可以加载该文件,或者稍后使用load()或loadFromData()函数来加载该文件。加载图像时,文件名可以引用磁盘上的实际文件,也可以引用应用程序的嵌入式资源之一。有关如何在应用程序的可执行文件中嵌入图片和其他资源文件的详细信息,请参见 Qt资源系统概述。
loadFromData()
只需调用save()函数即可保存QPixmap对象。
save()
可通过supportedImageFormats()和supportedImageFormats()函数获得受支持文件格式的完整列表。可以将新文件格式添加为插件。默认情况下,Qt支持以下格式:
supportedImageFormats()
使用 load() 从给定fileName的文件中加载像素图。如果成功加载了像素图,则返回 True;否则会使像素图无效并返回 False:
True
False
from xinet import QtWidgets, QtCore, QtGui from xinet.run_qt import run class Image(QtWidgets.QLabel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.pix = QtGui.QPixmap() # 载入图片,如果成功加载了像素图,则返回`True`;否则会使像素图无效并返回 `False` self.pix.load('test.jpg') self.setPixmap(self.pix) if __name__ == '__main__': run(Image) save() 是一个重载函数。此函数使用指定的图像文件 format 和 quality 因数将QPixmap写入给定device。例如,这可以用于将像素图直接保存到QByteArray中: pixmap = QPixmap() byte_array = QtCore.QByteArray() buffer = QtCore.QBuffer(byte_array) buffer.open(QtCore.QIODevice.WriteOnly) pixmap.save(buffer, "PNG") # writes pixmap into bytes in PNG format 4 Pixmap 信息 QPixmap提供了一组函数,这些函数可用于获取有关 pixmap 的各种信息: 可能的函数 Alpha component 如果 pixmap 具有 alpha 通道的格式,则hasAlphaChannel()返回True,否则返回False。hasAlpha(),setMask()和mask()函数是旧函数,因此不应使用。它们可能非常慢。createHeuristicMask()函数为 pixmap 创建并返回一个 1-bpp 的启发式掩码(heuristic mask,即QBitmap)。它的工作原理是从任一角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。createMaskFromColor()函数根据给定的颜色为 pixmap 创建并返回一个掩码(即QBitmap)。 Low-level information depth()函数返回像素图的深度。defaultDepth()函数返回默认深度,即应用程序在给定屏幕上使用的深度。cacheKey()函数返回一个数字,该数字唯一标识QPixmap对象的内容。 createHeuristicMask([clipTight=true]) 创建并返回此像素图的启发式蒙版。该功能的工作原理是从任一角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。 如果clipTight为true(默认值),则遮罩足够大以覆盖像素; 否则,掩码大于数据像素。 遮罩(mask)可能并不完美,但应该合理,因此您可以执行以下操作: myPixmap = QPixmap() myPixmap.setMask(myPixmap.createHeuristicMask()) 此函数很慢,因为它涉及到QImage的转换以及非平凡的计算。可参考:createHeuristicMask()、createMaskFromColor()。 5 Pixmap Conversion 可以使用toImage()函数将QPixmap对象转换为QImage。同样,可以使用fromImage()将QImage转换为QPixmap。如果此操作过于昂贵,则可以改用fromImage()。 要将QPixmap与HICON相互转换,可以分别使用QtWinExtras函数QtWin::toHICON()和QtWin::fromHICON()。 6 Pixmap Transformations QPixmap支持许多用于创建新 pixmap 的功能,该新 pixmap 是原始 pixmap 的转换(transformed)版本:scaled(),scaledToWidth()和scaledToHeight()函数返回像素图的缩放副本,而copy()函数创建的QPixmap是原始像素图的纯副本。 transformd()函数返回使用给定的转换矩阵和转换模式转换的像素图的副本:在内部,调整转换矩阵以补偿不需要的平移,即transform()返回包含原始像素图的所有转换点的最小像素图。 静态trueMatrix()函数返回用于转换像素图的实际矩阵。 下列图像处理类也支持 Transformations 中的这些函数: QBitmap QImage QImageReader QImageWriter
save() 是一个重载函数。此函数使用指定的图像文件 format 和 quality 因数将QPixmap写入给定device。例如,这可以用于将像素图直接保存到QByteArray中:
quality
device
QByteArray
pixmap = QPixmap() byte_array = QtCore.QByteArray() buffer = QtCore.QBuffer(byte_array) buffer.open(QtCore.QIODevice.WriteOnly) pixmap.save(buffer, "PNG") # writes pixmap into bytes in PNG format 4 Pixmap 信息 QPixmap提供了一组函数,这些函数可用于获取有关 pixmap 的各种信息: 可能的函数 Alpha component 如果 pixmap 具有 alpha 通道的格式,则hasAlphaChannel()返回True,否则返回False。hasAlpha(),setMask()和mask()函数是旧函数,因此不应使用。它们可能非常慢。createHeuristicMask()函数为 pixmap 创建并返回一个 1-bpp 的启发式掩码(heuristic mask,即QBitmap)。它的工作原理是从任一角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。createMaskFromColor()函数根据给定的颜色为 pixmap 创建并返回一个掩码(即QBitmap)。 Low-level information depth()函数返回像素图的深度。defaultDepth()函数返回默认深度,即应用程序在给定屏幕上使用的深度。cacheKey()函数返回一个数字,该数字唯一标识QPixmap对象的内容。 createHeuristicMask([clipTight=true]) 创建并返回此像素图的启发式蒙版。该功能的工作原理是从任一角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。 如果clipTight为true(默认值),则遮罩足够大以覆盖像素; 否则,掩码大于数据像素。 遮罩(mask)可能并不完美,但应该合理,因此您可以执行以下操作: myPixmap = QPixmap() myPixmap.setMask(myPixmap.createHeuristicMask()) 此函数很慢,因为它涉及到QImage的转换以及非平凡的计算。可参考:createHeuristicMask()、createMaskFromColor()。 5 Pixmap Conversion 可以使用toImage()函数将QPixmap对象转换为QImage。同样,可以使用fromImage()将QImage转换为QPixmap。如果此操作过于昂贵,则可以改用fromImage()。 要将QPixmap与HICON相互转换,可以分别使用QtWinExtras函数QtWin::toHICON()和QtWin::fromHICON()。 6 Pixmap Transformations QPixmap支持许多用于创建新 pixmap 的功能,该新 pixmap 是原始 pixmap 的转换(transformed)版本:scaled(),scaledToWidth()和scaledToHeight()函数返回像素图的缩放副本,而copy()函数创建的QPixmap是原始像素图的纯副本。 transformd()函数返回使用给定的转换矩阵和转换模式转换的像素图的副本:在内部,调整转换矩阵以补偿不需要的平移,即transform()返回包含原始像素图的所有转换点的最小像素图。 静态trueMatrix()函数返回用于转换像素图的实际矩阵。 下列图像处理类也支持 Transformations 中的这些函数: QBitmap QImage QImageReader QImageWriter
QPixmap提供了一组函数,这些函数可用于获取有关 pixmap 的各种信息:
hasAlphaChannel()
hasAlpha()
setMask()
mask()
createHeuristicMask()
QBitmap
createMaskFromColor()
depth()
defaultDepth()
cacheKey()
createHeuristicMask([clipTight=true]) 创建并返回此像素图的启发式蒙版。该功能的工作原理是从任一角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。 如果clipTight为true(默认值),则遮罩足够大以覆盖像素; 否则,掩码大于数据像素。
clipTight
遮罩(mask)可能并不完美,但应该合理,因此您可以执行以下操作:
myPixmap = QPixmap() myPixmap.setMask(myPixmap.createHeuristicMask()) 此函数很慢,因为它涉及到QImage的转换以及非平凡的计算。可参考:createHeuristicMask()、createMaskFromColor()。 5 Pixmap Conversion 可以使用toImage()函数将QPixmap对象转换为QImage。同样,可以使用fromImage()将QImage转换为QPixmap。如果此操作过于昂贵,则可以改用fromImage()。 要将QPixmap与HICON相互转换,可以分别使用QtWinExtras函数QtWin::toHICON()和QtWin::fromHICON()。 6 Pixmap Transformations QPixmap支持许多用于创建新 pixmap 的功能,该新 pixmap 是原始 pixmap 的转换(transformed)版本:scaled(),scaledToWidth()和scaledToHeight()函数返回像素图的缩放副本,而copy()函数创建的QPixmap是原始像素图的纯副本。 transformd()函数返回使用给定的转换矩阵和转换模式转换的像素图的副本:在内部,调整转换矩阵以补偿不需要的平移,即transform()返回包含原始像素图的所有转换点的最小像素图。 静态trueMatrix()函数返回用于转换像素图的实际矩阵。 下列图像处理类也支持 Transformations 中的这些函数: QBitmap QImage QImageReader QImageWriter
此函数很慢,因为它涉及到QImage的转换以及非平凡的计算。可参考:createHeuristicMask()、createMaskFromColor()。
可以使用toImage()函数将QPixmap对象转换为QImage。同样,可以使用fromImage()将QImage转换为QPixmap。如果此操作过于昂贵,则可以改用fromImage()。
toImage()
fromImage()
要将QPixmap与HICON相互转换,可以分别使用QtWinExtras函数QtWin::toHICON()和QtWin::fromHICON()。
HICON
QtWinExtras
QtWin::toHICON()
QtWin::fromHICON()
QPixmap支持许多用于创建新 pixmap 的功能,该新 pixmap 是原始 pixmap 的转换(transformed)版本:scaled(),scaledToWidth()和scaledToHeight()函数返回像素图的缩放副本,而copy()函数创建的QPixmap是原始像素图的纯副本。
scaled()
scaledToWidth()
scaledToHeight()
copy()
transformd()函数返回使用给定的转换矩阵和转换模式转换的像素图的副本:在内部,调整转换矩阵以补偿不需要的平移,即transform()返回包含原始像素图的所有转换点的最小像素图。 静态trueMatrix()函数返回用于转换像素图的实际矩阵。
transformd()
transform()
trueMatrix()
下列图像处理类也支持 Transformations 中的这些函数:
QBitmap QImage QImageReader QImageWriter
QImageReader
QImageWriter