А какова скорость отрисовки для текущей реализации?
Итоговая скорость отрисовки для двух изображений 6-7 fps.
немного не понял - почему готовая картинка запихивается в QLabel?
попробуй сделай свой собственный виджет и отрисовывай в нём на его paintEvent.. можно ещё отпихнуть это в отдельный поток что бы не торзмозила основная программа.
не уверен, но мне кажется что это быстрее будет..
кроме того надо посмотреть где медленная точка - именно в отрисовывании или где-то раньше.
может вообще имеет смысл писать картинки в видео поток и его отображать через "плеер"?
Внимательно промерил критические участки кода, проблема действительно не в отрисовке
Критический участок
130-230 ms загрузка из сырых данных -
вызов метода QPixmap::loadFromData( const uchar * data, uint len, "bmp" )
Масштабирование + Отрисовка (
в моем понимании вызов QLabel::setPixmap( const QPixmap & ) поправьте если не так )
занимает для двух изображений только
30 - 50 ms.
QLabel использовал в силу собственной глупости
Поток обработки загружает сырые данные в QPixmap, и высылает сигнал (QPixmap* img1,QPixmap*img2) в объект формы через Qt::BlockingQueuedConnection
Слот приёма масштабирует Pixmap под размеры QLabel на форме, предназначенного для отрисовки, далее QLabel::setPixmap.
В корне неправильный подход.
Qt любые трансформации изображения делает только через QImage.
Т.е. у вас сначала создается QImage, который вы потом перегоняете в QPixmap в GDI, потом этот QPixmap из GDI перегоняется в QImage, масштабируется и опять перегоняется в QPixmap в GDI. И имейте в виду, что Qt для double buffering держит ещё один QPixmap размером в top-level окно. В итоге получается довольно-таки не хилый трафик.
Предлагаю просто отказаться от QPixmap, использовать вместо него QImage и уже в paintEvent() через QPainter::drawImage() отрисовывать результирующее изображение.
Ежели после этого скорость не будет устраивать, то наверное стоит смотреть в сторону DirectX.
Большое спасибо!!! сделаю данную реализацию.
Единственное, беспокоит следующий вопрос:
Планирую использовать QImage::loadFromData ( const uchar * data, int len, "bmp" )
думаю время выполнения будет сравнимо с 130-230 ms для QPixmap::loadFromData( const uchar * data, int len, "bmp" ) см.выше
Из за того, что, как предполагаю, при вызове протормаживает на выделении памяти под новое изображение.
Обязательно проверю, попробую глянуть сорцы. Но хотел бы спросить:
Какой наиболее быстрый способ загрузить QImage из сырых данных ?
т.е. как я понимаю, избежать операции выделения в памяти, использовав раннее выделенный участок в объекте QImage.
P.S. или я, что то перемудрил
поправьте