Торможения таймера при рисовании, Python |
Здравствуйте, гость ( Вход | Регистрация )
Торможения таймера при рисовании, Python |
zuze |
16.4.2013, 13:00
Сообщение
#51
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
setColorTable нужно вызывать у конкретного экземпляра QImage, кроме того туда нужно передать вектор цветов, а не один цвет. Сделал, так:
Всё равно, таже ошибка. Надеюсь Вы не забыли, что каждый байт двоичного файла это цвет модели RGB. Возможно из-за этого не надо было использовать Format_Indexed8, а что-то другое. Сообщение отредактировал zuze - 16.4.2013, 13:00 |
|
|
lanz |
16.4.2013, 13:59
Сообщение
#52
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Вектор - это массив цветов. Цитата Надеюсь Вы не забыли, что каждый байт двоичного файла это цвет модели RGB И как эти цвета в нем упакованы? Сообщение отредактировал lanz - 16.4.2013, 14:00 |
|
|
zuze |
16.4.2013, 14:07
Сообщение
#53
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
И как эти цвета в нем упакованы? Сначала идёт служебная информация, которую мы пропускаем смещением начала чтения данных из файла. Первый байт после управляющих символов - это R = 1-й байт, G = 1-й байт, B = 1-й байт. Второй байт следующая точка в цветности RGB по токомуже принципу. В результате получаеться прямоугольная область с рисунком. Сделал примерно как у Вас, только в место data, у меня self.data
Всё равно, таже ошибка. Сообщение отредактировал zuze - 16.4.2013, 14:16 |
|
|
lanz |
16.4.2013, 14:36
Сообщение
#54
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата Первый байт после управляющих символов - это R = 1-й байт, G = 1-й байт, B = 1-й байт. Второй байт следующая точка в цветности RGB по токомуже принципу. Арифметика - царица наук Каждая точка занимает три байта. Размер картинки - 720*492 точки. Вопрос - сколько байт занимает картинка? И сравните ответ с тем что вы написали вот тут: Раскрывающийся текст
Кстати такой формат есть - RGB888 Сообщение отредактировал lanz - 16.4.2013, 14:39 |
|
|
zuze |
16.4.2013, 14:41
Сообщение
#55
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вопрос - сколько байт занимает картинка? Размер файла у меня 492*720 + 8 байт. Я сместил на 8 байт, так как они управляющие. R = 1-й байт, G = 1-й байт, B = 1-й байт - этим я хотел показать, что на кажом иттерации цика, если он был значения R, G и B равны. Общая картинка бы нартсовалась когда бы прошли циклы такие:
Сделал так:
Таже ошибка. Сообщение отредактировал zuze - 16.4.2013, 14:46 |
|
|
lanz |
16.4.2013, 15:42
Сообщение
#56
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
У меня все отрисовывается без ошибок.
Возможно проблема в загрузке файла. Можете файл забить каким то одним значением и выложить вместе с проектом? |
|
|
zuze |
7.5.2013, 10:53
Сообщение
#57
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
lanz, прошу прощения, что не отвечал, был в отпуске.
Всё равно тут цикл хоть и один. Пешил воспользоваться библиотекой matplotlib, так как вроде она сразу выводить массив на экран. Пока хочу целиком картинку вывести. Вот код:
Картинка выводится в отельном окне, но к сожалению ошибки:
Ошибка такая: File "D:/PythonProject/l/ld.py", line 44, in paintEvent self.MyDraw() File "D:/PythonProject/l/ld.py", line 100, in MyDraw plt.imshow(a, interpolation="none") File "D:\Python26\Lib\site-packages\matplotlib\pyplot.py", line 2737, in imshow imlim=imlim, resample=resample, url=url, **kwargs) File "D:\Python26\Lib\site-packages\matplotlib\axes.py", line 7105, in imshow im.set_data(X) File "D:\Python26\Lib\site-packages\matplotlib\image.py", line 422, in set_data raise TypeError("Invalid dimensions for image data") TypeError: Invalid dimensions for image data Может это из-за того, что в отельном окне всё рисуется? И ещё вопросик: как переделать
Чтобы получилось аналог этого:
Может я зря воспользоваться библиотекой matplotlib, а можно было воспользоватся библиотекой PIL (Python Imaging Library)? Но я, что-то не нашёл функции для рисования картинки по данным из двухмерного массива. Сообщение отредактировал zuze - 8.5.2013, 13:17 |
|
|
lanz |
14.5.2013, 9:30
Сообщение
#58
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
С выводом картинки, насколько я понял проблем нет. Тормозит тогда, когда картинка пересоздается.
Matplotlib и PIL не нужны, поскольку вы используете ту же функциональность Qt(setPixel/drawImage). |
|
|
Текстовая версия | Сейчас: 23.11.2024, 4:26 |