crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Торможения таймера при рисовании, Python
zuze
  опции профиля:
сообщение 29.3.2013, 10:34
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я пытаюсь закрасить область красным цветом за определённое время. Область будет закрашиватся каждый раз пока я не остановлю таймер.
Код:
# Глобальные
phi = 0.0
FlagStopRunPhi = 0
RunStopTimer = 1
timer = QtCore.QTimer()
im1 = QtGui.QImage(720, 492, QtGui.QImage.Format_ARGB32)

# В конструкторе

# Запустить таймер
self.connect(self.ui.pushButton_3, QtCore.SIGNAL("clicked()"), self.BlockTimer)

# Что происходит по таймеру
self.connect(timer, QtCore.SIGNAL("timeout()"), self.MyTimer)

def paintEvent(self, QPaintEvent):
      self.MyDraw()

# Запустить таймер
def BlockTimer(self):
            timer.start(0.05*1000)/60)

# Что происходит по таймеру
def MyTimer(self):
        global phi
        global im1

        if self.ui.checkBox_4.isChecked():
            for j in range(0, 720, 1):
                for i in range(491, -1, -1):
                    im1.setPixel(j, i, QtGui.QColor(255, 0, 0, 255).rgba())

        self.update()

        if self.ui.radioButton_2.isChecked():
            if int(self.MyRadianToGradus(phi)+0.5)*720/360 < 720:
                phi += self.MyGradusToRadian(6.0)
            else:
                phi = self.MyGradusToRadian(6.0)

# Рисуем
def MyDraw(self):
        global im1
        global phi

        Tochka = QtGui.QPainter()
        Tochka.begin(self)

        Tochka.translate(50, 50)

        Tochka.drawImage(0, 0, im1, 0, 0, int((2*self.MyRadianToGradus(phi))+0.5), 492)

        Tochka.end()


Должно быстро закрашиватся цветом, а закрашивается, только через каждые 0.5 секунды. Почему так происходит? В Qt всё быстро закрашивается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 15.4.2013, 16:43
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


1. Не нужно вызывать update в методе paintEvent это плодит ненужные циклы отрисовки.
2. Если используете Indexed8, то нужно определить таблицу цветов,
Цитата
If format is an indexed color format, the image color table is initially empty and must be sufficiently expanded with setColorCount() or setColorTable() before the image is used.

3. Если используете ARGB32, то байт должно быть в 4 раза больше (красная, зеленая, синияя и альфа - компоненты) т.е. размер файла должен быть 492*720*4.
4. data должен быть валиден в течении всего времени жизни картинки. (т.е. не должен быть локальной переменной)
Цитата
The buffer must remain valid throughout the life of the QImage. The image does not delete the buffer at destruction.

Это происходит потому что вызывается конструктор с неконстантным первым uchar*.
5. Эти преобразования бесполезны.
a = numpy.fromfile(fp, dtype=numpy.uint8)
a = numpy.flipud(a.reshape((492, 720), order='F'))
data = a.tostring()

То же самое будет если сделать
data = fp.read()

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- zuze   Торможения таймера при рисовании   29.3.2013, 10:34
- - Iron Bug   питон - интерпретатор. его скорость от 10 до 500 р...   29.3.2013, 11:02
- - zuze   Цитата(Iron Bug @ 29.3.2013, 11:02) питон...   29.3.2013, 11:17
- - Iron Bug   если ты утверждаешь, что Qt не тормозит, то больше...   29.3.2013, 16:57
- - zuze   Прямоугольная область с торможениями закрашивается...   3.4.2013, 15:28
- - lanz   timer.start((0.005 * 1000) / 60) (...   4.4.2013, 9:20
- - zuze   Цитата(lanz @ 4.4.2013, 9:20) Т.е. картин...   4.4.2013, 9:24
- - lanz   ЦитатаА как это поправить? Нужно картинку сгенери...   4.4.2013, 9:50
- - zuze   Цитата(lanz @ 4.4.2013, 9:50) Может он и ...   4.4.2013, 10:17
- - lanz   Если картинка не успевает обновится за 15 мс (а он...   4.4.2013, 10:37
- - zuze   Цитата(lanz @ 4.4.2013, 10:37) Поэтому и ...   4.4.2013, 10:45
- - lanz   1. Таймер в Qt. Python только вызывает функции. 2....   4.4.2013, 10:57
- - zuze   Цитата(lanz @ 4.4.2013, 10:57) 2. А как б...   4.4.2013, 11:11
- - zuze   Как я понял, мой коде есть ряд ошибок: 1. Код не у...   5.4.2013, 13:46
- - lanz   ЦитатаКод не удовлетворяет модели "модель-пре...   8.4.2013, 8:45
- - zuze   Цитата(lanz @ 8.4.2013, 8:45) Основные то...   8.4.2013, 8:54
- - zuze   Решил проверить время выполнения кода. if self.ui...   8.4.2013, 10:21
- - lanz   Все правильно, подготовка картинки занимает почти ...   8.4.2013, 10:35
- - zuze   Цитата(lanz @ 8.4.2013, 10:35) Картинку н...   8.4.2013, 10:43
- - lanz   Это все понятно, но картинка обновляется только ко...   8.4.2013, 10:51
- - zuze   Цитата(lanz @ 8.4.2013, 10:51) Это все по...   8.4.2013, 11:05
- - lanz   Нет, я о том чтобы убрать вот это if self.ui.chec...   8.4.2013, 11:41
- - zuze   Цитата(lanz @ 8.4.2013, 11:41) Нет, я о т...   8.4.2013, 12:19
- - lanz   Туда, где загружается картинка.   8.4.2013, 12:22
- - zuze   Цитата(lanz @ 8.4.2013, 12:22) Туда, где ...   8.4.2013, 13:14
- - zuze   Цитата(zuze @ 8.4.2013, 10:21) Все правил...   8.4.2013, 14:00
- - lanz   Потому что время замеряется ВНУТРИ одного вызова и...   8.4.2013, 16:03
- - zuze   Цитата(lanz @ 8.4.2013, 16:03) Все зависи...   8.4.2013, 16:11
- - lanz   Это я помню В Qt этот код был не в paintEvent.   8.4.2013, 16:52
- - zuze   Цитата(lanz @ 8.4.2013, 16:52) В Qt этот ...   8.4.2013, 21:12
- - lanz   И в том треде я писал, что надо вынести этот код и...   9.4.2013, 8:25
- - zuze   Цитата(lanz @ 9.4.2013, 8:25) И вообще, н...   9.4.2013, 9:40
- - lanz   Во втором пункте никак не избавиться. С какой ско...   9.4.2013, 13:35
- - zuze   Цитата(lanz @ 9.4.2013, 13:35) С какой ск...   9.4.2013, 13:38
- - lanz   А сколько времени должна рисоваться одна картинка?   10.4.2013, 14:20
- - zuze   Цитата(lanz @ 10.4.2013, 14:20) А сколько...   10.4.2013, 15:55
- - lanz   Очень странные цифры, за 50 мс - это два - три кад...   10.4.2013, 16:21
- - zuze   Цитата(lanz @ 10.4.2013, 16:21) зачем пер...   11.4.2013, 15:16
- - zuze   Сделал так: data = a.tostring() im = QtGu...   15.4.2013, 13:06
- - lanz   Ошибка при работе с памятью скорее всего, видимо с...   15.4.2013, 13:55
- - zuze   Цитата(lanz @ 15.4.2013, 13:55) Выложите ...   15.4.2013, 14:25
- - lanz   1. Не нужно вызывать update в методе paintEvent эт...   15.4.2013, 16:43
- - zuze   Я сделал так: # -*- coding: utf-8 -*- from Py...   16.4.2013, 8:44
- - lanz   ЦитатаЯ незнаю как сделать im локально, так как я ...   16.4.2013, 9:46
- - zuze   Цитата(lanz @ 16.4.2013, 9:46) Не надо де...   16.4.2013, 10:07
- - lanz   Конечно. Загружаете 720*492 байт, а картинке говор...   16.4.2013, 10:23
- - zuze   Цитата(lanz @ 16.4.2013, 10:23) Конечно. ...   16.4.2013, 10:36
- - lanz   Можно использовать Format_Indexed8, только нужно о...   16.4.2013, 11:29
- - zuze   Цитата(lanz @ 16.4.2013, 11:29) Можно исп...   16.4.2013, 12:21
- - lanz   setColorTable нужно вызывать у конкретного экземпл...   16.4.2013, 12:48
- - zuze   Цитата(lanz @ 16.4.2013, 12:48) setColorT...   16.4.2013, 13:00
- - lanz   im = QtGui.QImage(data, 492, 720, QtGui.QImage...   16.4.2013, 13:59
- - zuze   Цитата(lanz @ 16.4.2013, 13:59) И как эти...   16.4.2013, 14:07
- - lanz   ЦитатаПервый байт после управляющих символов - это...   16.4.2013, 14:36
- - zuze   Цитата(lanz @ 16.4.2013, 14:36) Вопрос - ...   16.4.2013, 14:41
- - lanz   У меня все отрисовывается без ошибок. Возможно про...   16.4.2013, 15:42
- - zuze   lanz, прошу прощения, что не отвечал, был в отпуск...   7.5.2013, 10:53
- - lanz   С выводом картинки, насколько я понял проблем нет....   14.5.2013, 9:30


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 17:24