使用 QPixmap 加载图像
Posted
技术标签:
【中文标题】使用 QPixmap 加载图像【英文标题】:Loading an image using QPixmap 【发布时间】:2011-05-10 16:36:07 【问题描述】:我有一个图片文件,如C:/44637landscapes-2007.jpg
我想使用 PySide 使用 QPixmap
加载此文件
我尝试如下。
pixmap = QPixmap('C:/44637landscapes-2007.jpg')
但是文档上写着 QPixmap(':/xxxxxx.jpeg')
。 ':'
是什么意思?
如何在'C:\'
加载图片?
编辑:问题在于尝试加载 "JPEG"
。它能够加载 "PNG"
,没有任何问题。那么还有什么,我需要做些什么来加载"JPEG"
?
谢谢 极乐
【问题讨论】:
【参考方案1】:Qt 对图像做了一些奇怪的事情。如果您只使用 pngs,您将永远不会遇到问题。其他图像格式的处理方式略有不同。
如果您查看您的 Qt 目录(所有二进制文件和源代码都在其中),您会发现一个名为:plugins\imageformats
在该目录中,Qt 支持的每种图像格式都有大量的dlls
(或.so
)。在您的情况下,我认为您感兴趣的是qjpeg4.dll
现在,当您运行应用程序并尝试使用jpeg
时,Qt 将尝试加载此插件,但如果找不到,则您的图像将不会显示。
我们对 ico 文件也有类似的问题。它在我们的开发环境中工作,因为 Qt 文件夹在我们的PATH,
中,因此它神奇地找到了这个插件。但是,当我们发布我们的软件时,我们只会分发我们需要的那些 dll,因此它不起作用。
经过大量调查,这就是我们所做的:
我们的应用程序位于 bin/ 目录中。这是放置 exe 和所有 Qt dll 的地方。 QtCore4.dll
和 QtGui4.dll
等...
在 bin 目录下,我们创建一个名为'imageformats'
的子目录
将qjpeg4.dll
和您可能需要的任何其他图像插件放入。
修改代码如下:
QApplication _App(argc, argv);
// Find the path of your bin directory - whereever your exe resides.
QString _Path = _PathToBin + QString(QDir::separator()) + "imageformats");
// This line is providing a path to Qt telling it to look here for plugins
QApplication::addLibraryPath(_Path);
// Initialize the main form
return _App.exec();
这应该确保 Qt 知道 jpeg
处理插件,并在 UI
中加载您的图像。
【讨论】:
【参考方案2】:您可以通过提供文件的路径名来构造 QPixMap 的实例。尝试代码时遇到什么错误?将您的代码更改为:
pixmap = QPixMap(r'C:\filename.jpeg')
您所指的文档是您加载 Qt 资源的方式。可以将应用程序需要的图像转换为 Qt 资源,以便以独立于平台的方式加载它。有关执行此操作的步骤,请参阅The Qt Resource System 文档。
【讨论】:
我没有收到任何错误。当,我尝试像 pixmap = QPixmap() pixmap.load('r^C:\abc.jpeg') 。它返回 'false' 。这意味着加载不起作用。 如果您能够加载像素图,那么问题是什么? 我无法加载图像。根据文档,如果它返回 "false" ,我认为它不会加载图像。 ' 当你创建一个像素图实例时,图像也会被加载(前提是文件存在并且格式可读),否则你会得到一个空对象。 当我尝试加载 PNG 时,它起作用了。我认为要加载 JPEG,需要做一些额外的事情。【参考方案3】:如果您尝试将 Python 代码构建为可执行文件,这涵盖了 .ico 文件的问题,但 JPEG 的过程是相同的: PyQt/PySide - icon display
如果您在从安装的解释器运行时遇到问题,那么您的路径变量可能设置不正确,您的 qt.conf(在基本 python 目录中)已被删除/更改,或者您没有 qjpeg4。 dll 它应该在哪里 (<python dir>\Lib\site-packages\PySide\plugins\imageformats
)。
我的 qt.conf 看起来像:
[Paths]
Prefix = C:/Python27/lib/site-packages/PySide
Binaries = .
Plugins = plugins
Translation = translation
C:/Python27/lib/site-packages/PySide
是我的系统 PATH 变量的一部分,并且是任何 PyQt(或其他 Qt)目录的ahead。
【讨论】:
没问题,出于好奇,真正的问题是什么?在可能的解决方案列表中,我采取了一些霰弹枪的方法。 问题是 qt.conf 路径不正确。它指向错误的插件文件夹。以上是关于使用 QPixmap 加载图像的主要内容,如果未能解决你的问题,请参考以下文章
Python Qt GUI设计:QPainterQPenQBrush和QPixmap窗口绘图类(基础篇—17)
Python Qt GUI设计:QPainterQPenQBrush和QPixmap窗口绘图类(基础篇—17)