Ошибка при рисовании QImage на виджете с PIL и PyQt - PullRequest
2 голосов
/ 15 июня 2010

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

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

https://gist.github.com/f6d479f286ad75bf72b7

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

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

Ответы [ 2 ]

4 голосов
/ 16 декабря 2010

Имел ту же проблему, затем заметил, что объекты 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_())
1 голос
/ 15 июня 2010

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

self.image = QImage()
if self.image.loadFromData(image_data,"PNG"):
    # image loaded successfully
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...