Название: QGraphicsScene как ускорить отрисовку? Отправлено: qwyllum от Июнь 03, 2013, 19:57 Доброго времени суток! Мне необходимо визуализировать карту высот. Существует массив 721*721, в котором хранятся данные. Пробовал каждому элементу сопоставить точку. Т.е. считываю каждое значение массива и добавляю точку определенного цвета на сцену.
Изображение визулизируется около 20 секунд. Стоит задача оптимизации этого всего чуда Сперва подумал в сторону генерирования в изображение. Но вряд ли рисование на буфере рисунка будет сильно быстрее рисования на экранном буфере. Может у кого есть идеи? Пока в голову пришло рисовать не каждую точку, а из 4-х делать одну с усредненным значением цвета. Но от этого будет страдать качество. Может кто еще что посоветует? Название: Re: QGraphicsScene как ускорить отрисовку? Отправлено: _OLEGator_ от Июнь 03, 2013, 20:09 Много слов, сути нету.
Как рисуешь на сцене? Название: Re: QGraphicsScene как ускорить отрисовку? Отправлено: qwyllum от Июнь 03, 2013, 20:24 Код: scene.addItem(new Plot(x,y, color)); Название: Re: QGraphicsScene как ускорить отрисовку? Отправлено: _OLEGator_ от Июнь 03, 2013, 20:28 Это ты под каждый пиксель QGraphicsItem выделяешь?!
Конечно будет тормозить. Ясное дело, генерируй картинку и ее рисуй. Название: Re: QGraphicsScene как ускорить отрисовку? Отправлено: Dancing_on_water от Июнь 15, 2013, 20:49 Ну, строго говоря, совет неверный.
В чем проблема: вы создали массив из 721*721 item-ов, но помните, что сцена их не просто рисует, но проиндексировала. И каждый чих она пытается понять как элементы взаимодействуют и т.п. Итак, во-первых это не разные объекты, а один и нам следует его выдавать одним куском Этап номер 1. Вычисляем массив отображаемых точек и кэшируем его и рисуем скопом: Код
Этап 2 Если скорость отрисовки неустраивает допиливаем: Код
Этап 3. Если снова не устраивает, то переделываем: Код
Название: Re: QGraphicsScene как ускорить отрисовку? Отправлено: Igors от Июнь 16, 2013, 08:40 Доброго времени суток! Мне необходимо визуализировать карту высот. Существует массив 721*721, в котором хранятся данные. Ну и храните его в виде QImage, это детский размер. Нужно отрисовать - делаете др QImage (цвет из значений высоты). При работе с буфером QImage напрямую время отрисовки должно быть намного меньше 0.1 сек |