Торможения таймера при рисовании, Python |
Здравствуйте, гость ( Вход | Регистрация )
Торможения таймера при рисовании, Python |
zuze |
15.4.2013, 14:25
Сообщение
#41
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Выложите проект, попробую потыркать.
К сожалению я немогу дать Вам файл. Можно использовать любую строку длинной 492 * 720, только тогда не нужен код:
Прикреплённый архив содержит ld.ui Может дело в a.tostring(), которая вроде не всегда стабильно работает. Может какой другому можно подготовить данные из файла, что бы из загрузить затем в объект QImage? Сообщение отредактировал zuze - 15.4.2013, 14:15
Прикрепленные файлы
|
|
|
lanz |
15.4.2013, 16:43
Сообщение
#42
|
Старейший участник Группа: Участник Сообщений: 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. Эти преобразования бесполезны.
То же самое будет если сделать
|
|
|
zuze |
16.4.2013, 8:44
Сообщение
#43
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Я сделал так:
В этом коде случилось следующие: 1. update в методе paintEvent. 2. В место собственных функций преобразование из радиан в градусы и обратно использовал стандартные. 3. Преобразование строки заменил на такое data = fp.read() Я незнаю как сделать im локально, так как я im использую в MyTimer(), но также я im использую в MyDraw(). Подскажите пожалуйста, как это сделать? Эти преобразования бесполезны.
Не знаю на сколько они безполезны, но если в циклах заполняем im сзначениями из a, то всё прекрасно, картинка рисуется, но медленно. Вот я немного удивлён, что эти преобразования бесполезны. |
|
|
lanz |
16.4.2013, 9:46
Сообщение
#44
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата Я незнаю как сделать im локально, так как я im использую в MyTimer(), но также я im использую в MyDraw(). Подскажите пожалуйста, как это сделать? Не надо делать im локальным, надо сделать data глобальным/членом класса. data должна существовать после того как управление выйде из MyTimer поскольку коструктор QImage сохраняет только указатель на дату. Цитата Вот я немного удивлён, что эти преобразования бесполезны. Это я проглядел что массив флипается. |
|
|
zuze |
16.4.2013, 10:07
Сообщение
#45
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Не надо делать im локальным, надо сделать data глобальным/членом класса. data должна существовать после того как управление выйде из MyTimer поскольку коструктор QImage сохраняет только указатель на дату. Сделал в конструкторе класса, так:
Сделал в MyTimer
И всё равно, таже ошибка? |
|
|
lanz |
16.4.2013, 10:23
Сообщение
#46
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Конечно. Загружаете 720*492 байт, а картинке говорите что их 720*492*4 (Format_ARGB32)
|
|
|
zuze |
16.4.2013, 10:36
Сообщение
#47
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
lanz |
16.4.2013, 11:29
Сообщение
#48
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Можно использовать Format_Indexed8, только нужно обязательно задать таблицу цветов.
http://qt-project.org/doc/qt-4.8/qimage.html#setColorTable |
|
|
zuze |
16.4.2013, 12:21
Сообщение
#49
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Можно использовать Format_Indexed8, только нужно обязательно задать таблицу цветов. Сделал так:
Всё равно, тажа ошибка. Сообщение отредактировал zuze - 16.4.2013, 12:21 |
|
|
lanz |
16.4.2013, 12:48
Сообщение
#50
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
setColorTable нужно вызывать у конкретного экземпляра QImage, кроме того туда нужно передать вектор цветов, а не один цвет.
Сообщение отредактировал lanz - 16.4.2013, 12:49 |
|
|
Текстовая версия | Сейчас: 14.11.2024, 19:46 |