【问题标题】:Bug when drawing a QImage on a widget with PIL and PyQt使用 PIL 和 PyQt 在小部件上绘制 QImage 时出现错误
【发布时间】:2010-06-14 23:54:02
【问题描述】:

我正在尝试编写一个小型图形应用程序,我需要 使用我在小部件中显示的 PIL 构建一些图像。 图像构造正确(我可以使用 im.show() 检查), 我可以将它转换为 QImage,我可以正常保存到磁盘 (使用 QImage.save),但如果我尝试直接在我的 QWidget,它只显示一个白色方块。

这里我注释掉了不起作用的代码(将 图像进入 QImage 然后 QPixmap 产生一个白色方块),我 做了一个肮脏的黑客将图像保存到临时文件并直接加载它 在 QPixmap 中,它可以工作但不是我想要做的

https://gist.github.com/f6d479f286ad75bf72b7

有人有想法吗?

如果有帮助,当我尝试将 QImage 保存为 BMP 文件时,我可以访问其内容,但如果我尝试将其保存为 PNG,则它是完全白色的

【问题讨论】:

    标签: python image qt pyqt python-imaging-library


    【解决方案1】:

    有同样的问题,然后注意到,ImageQt 对象不是 QImages,但可以简单地转换为那些

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    #written by Sebastian Stetter in 2010
    
    
    import sys
    from PIL import Image
    from PIL.ImageQt import ImageQt
    
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    
    
    def PILimageToQImage(pilimage):
        """converts a PIL image to QImage"""
        imageq = ImageQt(pilimage) #convert PIL image to a PIL.ImageQt object
        qimage = QImage(imageq) #cast PIL.ImageQt object to QImage object -that´s the trick!!!
        return qimage
    
    
    
    
    if __name__ == "__main__":
        #Testcode
        app = QApplication(sys.argv)
    
        pim = Image.open(unicode(QFileDialog().getOpenFileName()))
        pim.show() #show pil image
    
        qim = PILimageToQImage(pim)
        pm = QPixmap(qim)
        lbl = QLabel()
        lbl.setPixmap(pm)
        lbl.show() #show label with qim image
    
        sys.exit(app.exec_())
    

    【讨论】:

      【解决方案2】:

      我使用QImage.loadFromData() 对 Qt-3 做了同样的事情。我想它在 Qt-4 中仍然有效:

      self.image = QImage()
      if self.image.loadFromData(image_data,"PNG"):
          # image loaded successfully
      

      【讨论】:

      • 是的,但是我的程序不应该使用这样的技巧,因为 PIL ImageQt.ImageQt 正确(?)将图像转换为 QImage,我应该能够直接显示它!我不知道为什么它显示为白色矩形..
      • loadFromData 返回一个表示成功或失败的布尔值,并允许您指定图像格式。因此,它可以让您进一步了解它失败的原因。如果图像被正确加载,则没有正当理由它应该在一种情况下正确显示,而在另一种情况下则不能正确显示。理想情况下,ImageQt 会给你一个有效的QImage
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多