在使用PIL和PyQt绘制QImage到小部件时的错误
我正在尝试写一个小的图形应用程序,需要用PIL构建一些图像,然后在一个小部件中显示出来。图像构建得很正确(我可以用im.show()来检查),我可以把它转换成QImage,然后正常保存到磁盘(用QImage.save),但是如果我直接在我的QWidget上绘制它,它只显示一个白色的方块。
这里我把不工作的代码注释掉了(把Image转换成QImage再转成QPixmap结果是一个白色方块),然后我做了一个小技巧,把图像保存到一个临时文件,然后直接在QPixmap中加载,这样可以工作,但这不是我想要的做法。
https://gist.github.com/f6d479f286ad75bf72b7
有人有什么想法吗?
如果有帮助的话,当我尝试把我的QImage保存为BMP文件时,我可以访问它的内容,但如果我尝试保存为PNG文件,它就完全是白色的。
2 个回答
1
我之前在Qt-3中也做过类似的事情,使用了QImage.loadFromData()这个方法。我想在Qt-4中也应该可以用。
self.image = QImage()
if self.image.loadFromData(image_data,"PNG"):
# image loaded successfully
5
我也遇到过同样的问题,然后我发现,ImageQt对象其实不是QImage,但可以很简单地转换成QImage。
#!/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_())