Найти - Пользователи
Полная версия: Торможения таймера при зарисовки цветом
Начало » GUI » Торможения таймера при зарисовки цветом
1 2 3 4
reclosedev
zeze
Зачем это делать, так как двухмерный массив значений построен уже?
QImage может создаваться из “сырых” данных, для этого конструктору нужно передать строку с данными и их формат, что и делается в __init__(). Это намного быстрее чем setPixel().

Вы кажется не поняли использование, уже писал:
img = BinImage("img.dat")
img - это теперь картинка, которую можно показывать и делать с ней что угодно. Например, показать на лэйбле.
img = BinImage("img.dat")
self.image_label.setPixmap(QtGui.QPixmap.fromImage(img))
zeze
Я пробовал так сделать:

a = numpy.fromfile(fp, dtype=numpy.uint8)
a = numpy.flipud(a.reshape((492, 720), order='F'))
a.tostring()
im = QtGui.QImage.__init__(self, self, 492, 720, self.Format_Indexed8)

Для вывода так делаю:

def MyDraw(self):
        global im
        Tochka = QtGui.QPainter()
        Tochka.begin(self)
        Tochka.translate(50, 50)
        Tochka.drawImage(0, 0, im, 0, 0, int((2*self.MyRadianToGradus(phi))+0.5), 492)
        Tochka.end()
        self.update()

Выдаётся вот такая ошибка:
im = QtGui.QImage.__init__(self, self, 492, 720, self.Format_Indexed8)
TypeError: ‘sip.methoddescriptor’ object is not callable

Я пробовал в место

a.tostring()
im = QtGui.QImage.__init__(self, self, 492, 720, self.Format_Indexed8)

Написать

self.__data = a.tostring()
im = QtGui.QImage.__init__(self, self.__data, 492, 720, self.Format_Indexed8)

Таже самая ошибка. Не знаю важно или нет, но у меня Python 2.6

Как я понял я не правильно конструктор определил, а вот как правильно не понимаю. Помогите пожалуйста понять.


reclosedev
Не понимаю чего вы хотите.
self.__data = a.tostring()
im = QtGui.QImage(self.__data, 492, 720, self.Format_Indexed8)
Этого?

Похоже, что нужно почитать Учебник Python 2.6 - Классы
zeze
reclosedev
Не понимаю чего вы хотите.

self.__data = a.tostring()
im = QtGui.QImage(self.__data, 492, 720, self.Format_Indexed8)

Этого?

Я сделал, как Вы написали, но увы у меня теперь ошибка:
im = QtGui.QImage(self.__data, 492, 720, self.Format_Indexed8)
TypeError: ‘sip.methoddescriptor’ object is not callable

Может это из-за того, что я не правильно определил im.
Определяю так:

im = QtGui.QImage(720, 492, QtGui.QImage.Format_ARGB32)

Пробовал так:

im = QtGui.QImage(720, 492, QtGui.QImage.Format_Indexed8)

Не помогло.
zeze
Сделал так:

data = a.tostring()
im = QtGui.QImage(data, 492, 720, QtGui.QImage.Format_ARGB32)

Это ошибка пропадает.
Но в момент первого срабатывания таймера возникает ошибка:
Появляется окно с выбором из трёх кнопок:
1 кнопка (Искать решение проблемы в Интернете и закрыть программу)
2 кнопка (Закрыть программу)
3 кнопка (отладить программу)

А текстом пишется:
Process finished with exit code -1073741819

В чём может быть дело?
reclosedev
Потому что передающий в QImage data отвечает за нее, т.е. она должна хранится. А при выходе из функции/цикла, Python удаляет ее.
http://qt-project.org/doc/qt-4.8/qimage.html#QImage-4
The buffer must remain valid throughout the life of the QImage. The image does not delete the buffer at destruction.

Это все было учтено в BinImage. Хотите чтобы работало - используйте так, как было изначально показано. Хотите извращений - удачи, мне в этом участвовать надоело.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB