关于python:使用PIL和PyQt在小部件上绘制QImage时出现错误

Bug when drawing a QImage on a widget with PIL and PyQt

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

在这里,我注释掉了无效的代码(将
图片进入QImage,然后QPixmap生成一个白色正方形),我
进行了肮脏的破解,将图像保存到临时文件并直接加载
在QPixmap中,可以工作但是不是我想要做的

https://gist.github.com/f6d479f286ad75bf72b7

有人有主意吗?

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


遇到同样的问题,然后注意到,ImageQt对象不是QImages,而是可以简单地强制转换为那些对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/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_())

我已经使用QImage.loadFromData()对Qt-3做过同样的事情。 我想它仍然可以在Qt-4中使用:

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