Qt 之 QPixmap

Qt 之 QPixmap,第1张

QPixmap 类是一种 off-screen 图像表示形式,可以用作绘画设备。使用 QLabel 或 QAbstractButton 的子类之一(例如 QPushButton 和 QToolButton ),可以轻松地在屏幕上显示 QPixmap 。 QLabel 具有 pixmap 属性,而 QAbstractButton 具有 icon 属性。

由于 QPixmap 类使用隐式数据共享,因此可以按值传递 QPixmap 对象。有关更多信息,请参见隐式数据共享( Implicit Data Sharing )文档。 QPixmap 对象也可以流式传输。

请注意,pixmap 中的像素数据是内部的,并由基础窗口系统管理。由于 QPixmap 是 QPaintDevice 子类,因此 QPainter 可用于直接绘制到 pixmap 上。只能通过 QPainter 函数或将 QPixmap 转换为 QImage 来访问像素。但是, fill() 函数可用于以给定的颜色初始化整个像素图。

有一些函数可以在 QImage 和 QPixmap 之间进行转换。通常,在将 QImage 对象转换为要在屏幕上显示的 QPixmap 之前,使用 QImage 类加载图像文件,并选择处理图像数据。或者,如果不需要任何 *** 作,则可以将图像文件直接加载到 QPixmap 中。

QPixmap 提供了一组函数,这些函数可用于获取有关像素图的各种信息。另外,有几个函数可以转换像素图。

从给定 fileName 的文件构造一个 pixmap。如果文件不存在或格式未知,则像素图将成为空像素图(null pixmap)。加载程序尝试使用指定的 format 读取像素图。如果未指定 format (默认设置),则加载程序会在文件中探测标头以猜测文件格式。文件名可以引用磁盘上的实际文件,也可以引用应用程序的嵌入式资源之一。 有关如何在应用程序的可执行文件中嵌入图像和其他资源文件的详细信息,请参见 Resource System 。

如果需要修改图像以适应较低分辨率的结果(例如,从32位转换为8位),请使用 flags 来控制转换。

fileName , format 和 flags 参数传递给 load() 。这意味着 fileName 中的数据未编译为二进制文件。如果 fileName 包含相对路径(例如,仅文件名),则必须找到相对于运行时工作目录的相关文件。

使用给定的 width 和 height 构造一个像素图。如果 width 或 height 为零,则构造一个空的像素图。警告:这将创建一个带有未初始化数据的 QPixmap 。调用 fill() 以用适当的颜色填充像素图,然后使用 QPainter 对其进行绘制。

下面以 QLabel 为例子说明如何使用 QPixmap :

效果:

QPixmap 提供了几种读取图像文件的方式:构造 QPixmap 对象时可以加载该文件,或者稍后使用 load() 或 loadFromData() 函数来加载该文件。加载图像时,文件名可以引用磁盘上的实际文件,也可以引用应用程序的嵌入式资源之一。有关如何在应用程序的可执行文件中嵌入和其他资源文件的详细信息,请参见 Qt资源系统概述 。

只需调用 save() 函数即可保存 QPixmap 对象。

可通过 supportedImageFormats() 和 supportedImageFormats() 函数获得受支持文件格式的完整列表。可以将新文件格式添加为插件。默认情况下,Qt支持以下格式:

使用 load() 从给定 fileName 的文件中加载像素图。如果成功加载了像素图,则返回 True ;否则会使像素图无效并返回 False :

效果:

请注意,从主线程中的文件加载时, QPixmap 会自动添加到 QPixmapCache 中。使用的 key 是内部密钥,无法获取。

loadFromData() 从给定二进制数据的 len 个前字节加载 pixmap。如果成功加载了像素图,则返回 true;否则会使像素图无效并返回 false。

save() 是一个重载函数。此函数使用指定的图像文件 format 和 quality 因数将 QPixmap 写入给定 device 。例如,这可以用于将像素图直接保存到 QByteArray 中:

QPixmap 提供了一组函数,这些函数可用于获取有关 pixmap 的各种信息:

createHeuristicMask([clipTight=true]) 创建并返回此像素图的启发式蒙版。该功能的工作原理是从任一角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。 如果 clipTight 为true(默认值),则遮罩足够大以覆盖像素; 否则,掩码大于数据像素。

遮罩(mask)可能并不完美,但应该合理,因此您可以执行以下 *** 作:

此函数很慢,因为它涉及到 QImage 的转换以及非平凡的计算。可参考: createHeuristicMask() 、 createMaskFromColor() 。

可以使用 toImage() 函数将 QPixmap 对象转换为 QImage 。同样,可以使用 fromImage() 将 QImage 转换为 QPixmap 。如果此 *** 作过于昂贵,则可以改用 fromImage() 。

要将 QPixmap 与 HICON 相互转换,可以分别使用 QtWinExtras 函数 QtWin::toHICON() 和 QtWin::fromHICON() 。

QPixmap 支持许多用于创建新 pixmap 的功能,该新 pixmap 是原始 pixmap 的转换(transformed)版本: scaled() , scaledToWidth() 和 scaledToHeight() 函数返回像素图的缩放副本,而 copy() 函数创建的 QPixmap 是原始像素图的纯副本。

scaled() 返回根据给定的 AspectRatioMode 和 transformMode 缩放为具有给定 width 和 height 的矩形的像素图的副本。

scaledToWidth() 和 scaledToHeight() 使用方法类似于 scaled() :

copy() 返回由矩形 QRect ( x , y , width , height ) 指定的像素图子集的深层副本:

transformd() 函数返回使用给定的转换矩阵和转换模式转换的像素图的副本:在内部,调整转换矩阵以补偿不需要的平移,即 transform() 返回包含原始像素图的所有转换点的最小像素图。 静态 trueMatrix() 函数返回用于转换像素图的实际矩阵。

下列图像处理类也支持 Transformations 中的这些函数:

QBitmap QImage QImageReader QImageWriter

PySide2QtGuiQPixmapisNull() 如果这是一个空的像素图,则返回 true;否则返回 false。

PySide2QtGuiQPixmapswap(other) 用此像素图交换 other (即 QPixmap 实例)。 此 *** 作非常快,并且永远不会失败。

我是QT一军团的军团长,这个L图标代表你在英雄联盟客户端里开启了军团系统,就是登录选区时候右上角那个开启开黑语音选项,开启了后别人看你自动有L图标。没有L图标的证明你是用QT客户端进入的房间。求采纳= =

void GetSysBit(bool& bIs32Bit)

{

bIs32Bit = true;

SYSTEM_INFO si;

// Copy the hardware information to the SYSTEM_INFO structure

GetNativeSystemInfo(&si);

// Display the contents of the SYSTEM_INFO structure

printf("siwProcessorArchitecture = %d\nPROCESSOR_ARCHITECTURE_AMD64 = %d\nPROCESSOR_ARCHITECTURE_IA64 = %d\n",

siwProcessorArchitecture, PROCESSOR_ARCHITECTURE_AMD64, PROCESSOR_ARCHITECTURE_IA64);

if (siwProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || siwProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)

{

bIs32Bit = false;

printf("bIs64Bit\n");

}

else {

bIs32Bit = true;

printf("bIs32Bit\n");

}

}

这是window下的获取方式(这个用用虚拟机测试可行),使用QT的QSysInfo测试发现获取出来的是编译器使用的位数(win7 64位系统下测试)

我在Ubuntu1604和Anaconda4317(Python27)上遇到了这个问题。这个问题源于安装了Qt 56版本的anaconda,而我的系统Qt库是55版本。

一个快速的技巧是通过设置LD_LIBRARY路径来确保Anaconda库位于系统库之前:export LD_LIBRARY_PATH=$HOME/anaconda2/lib:$LD_LIBRARY_PATH

不幸的是,这将破坏使用Qt55的其他程序,因此您只能在100%Python的情况下使用它,例如,如果您使用--pylab启动ipython会话。

我通过查看libxqcbso的链接方式发现了这个问题:

ldd $HOME/anaconda2/plugins/platforms/libqxcbso

报告了以下错误:/libqxcbso: /usr/lib/x86_64-linux-

以上就是关于Qt 之 QPixmap全部的内容,包括:Qt 之 QPixmap、英雄联盟QT军团系统、Qt判断windows系统的位数,该如何解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10158984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存