2010-06-14 3 views
2

작은 그래픽 응용 프로그램을 작성하려고하는데 위젯에 표시되는 PIL을 사용하여 이미지를 구성해야합니다. 이미지가 올바르게 구성되었습니다 (im.show()로 확인할 수 있음) QImage로 변환 할 수 있습니다. QImage.save를 사용하여 디스크 에 정상적으로 저장할 수 있지만 이미지를 직접 그려야합니다. 내 QWidget에 흰색 사각형 만 표시됩니다.PIL 및 PyQt를 사용하여 위젯에 QImage를 그릴 때 나타나는 버그

여기에 내가 (다음 흰색 사각형을 초래할 QPixmap QImage에 이미지 변환) 작동하지 않는 코드에서 주석, 나는 은 임시 파일에 이미지를 저장하고 직접 를로드하는 더러운 해킹했다 작동하지만

https://gist.github.com/f6d479f286ad75bf72b7

누군가가 아이디어를 가지고 수행 할 작업을하지 않은 QPixmap에?

가 도움이 될 수 있다면 나는 BMP 파일에 내 QImage을 저장하려고하면, 나는 그것의 콘텐츠에 액세스 할 수 있습니다,하지만 난 PNG로 저장하려고하면 내가이 짓을했는지

답변

4

같은 문제가 있었다 발견, 단순히 그

#!/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_()) 
1

완전히 흰색입니다 QImage.loadFromData()을 사용하는 Qt-3의 경우도 마찬가지입니다. 나는 여전히 Qt를-4에서 작동 상상 : ImageQt 개체 QImages가 아니라는 것을, 다음,

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

그래로 주조 할 수 있지만 내 프로그램 PIL ImageQt.ImageQt가 올바르게 (?) 이미지를 QImage로 변환하기 때문에 이와 같은 해킹을 사용하면 안됩니다. 직접 표시 할 수 있어야합니다. 나는 왜 그것이 을 흰색 사각형으로 표시하는지 모르겠다. – oulipo

+0

'loadFromData'는 성공 또는 실패를 나타내는 bool을 반환하고 이미지 형식을 지정할 수있게 해준다. 따라서 왜 실패했는지에 대한 통찰력을 얻을 수 있습니다. 이미지가 올바르게로드되는 경우 올바른 경우 한 경우에는 표시되지만 다른 곳에서는 올바르게 표시되지 않는 이유는 없습니다. 이상적으로'ImageQt'는 당신에게 유효한'QImage'를 줄 것입니다. –

관련 문제