Я пытаюсь написать небольшое графическое приложение, и мне нужно создать какое-то изображение с использованием PIL, которое я показываю в виджете. Изображение построено правильно (я могу проверить с помощью im.show ()), я могу преобразовать его в QImage, который я могу нормально сохранить на диск (используя QImage.save), но если я попытаюсь нарисовать его прямо на моем QWidget , отображается только белый квадрат.

Здесь я закомментировал код, который не работает (преобразование изображения в QImage, затем результат QPixmap в белый квадрат), и я сделал грязный хак, чтобы сохранить изображение во временный файл и загрузить его непосредственно в QPixmap, которые работают, но это не то, что я хочу делать

https://gist.github.com/f6d479f286ad75bf72b7

У кого-то есть идея?

Если это может помочь, когда я пытаюсь сохранить QImage в файле BMP, я могу получить доступ к его содержимому, но если я попытаюсь сохранить его в PNG, он будет полностью белым.

2
oulipo 15 Июн 2010 в 03:54

2 ответа

Лучший ответ

Если бы та же проблема, то заметил, что объекты 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_())
4
Sebastian Stetter 16 Дек 2010 в 10:36

Я проделал то же самое с Qt-3, используя QImage.loadFromData () . Я полагаю, что это все еще работает в Qt-4:

self.image = QImage()
if self.image.loadFromData(image_data,"PNG"):
    # image loaded successfully
1
Kaleb Pederson 15 Июн 2010 в 14:31