Russian Qt Forum
Ноябрь 22, 2024, 11:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Быстрый вывод картинки  (Прочитано 32930 раз)
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« : Апрель 28, 2005, 14:49 »

Есть изображение, скажем массив RGB. Надо его быстро отобразить на экран. У кого какие соображения.

В данное время происходит так:

создаю QImage
в цикле ставлю setPixel у картинки
и вывожу ее на экран с помощью QPainter

но тормозно ужастно
Записан
Sergeich
Гость
« Ответ #1 : Апрель 28, 2005, 15:01 »

Самое быстрое что можно сделать - использовать OpenGL
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Апрель 28, 2005, 15:13 »

а можно пример в студию!
Записан
Ruslan Popov
Гость
« Ответ #3 : Апрель 28, 2005, 15:29 »

Вот альтернативный вариант с использованием SDL.

Внедрение SDL окна в Qt виджет:
http://forum.sources.ru/index.php?act=Attach&type=post&id=695090
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #4 : Апрель 28, 2005, 15:39 »

это SDL внедрять в проект
а это его утяжелит
Записан
Ruslan Popov
Гость
« Ответ #5 : Апрель 28, 2005, 15:45 »

Компакт-диски весят немного.

Кстати, если на CD записать на 200 мегабайт больше, он сильно потяжелеет в смысле веса? Улыбающийся

И с каких пор OpenGL стал стандартной фичей Windows???
Записан
Sergeich
Гость
« Ответ #6 : Апрель 28, 2005, 16:12 »

Цитата: "Admin"
а можно пример в студию!

Дык сам напиши... там все просто: создаешь QGLWidget, и в paintGL() юзаешь ф-ции glRasterPos() и glDrawPixels()
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #7 : Апрель 28, 2005, 17:15 »

1. Часто программы скачивают из инета. А там размер важен, скачать 1 мег и 10 мег - большая разница

2. А OpenGL насколько быстрее будет?
Записан
Sergeich
Гость
« Ответ #8 : Апрель 28, 2005, 17:29 »

Цитата: "Admin"
1. Часто программы скачивают из инета. А там размер важен, скачать 1 мег и 10 мег - большая разница

А причем тут сеть? Можно поподробнее...
Цитата: "Admin"
2. А OpenGL насколько быстрее будет?

Все зависит от конфигурации: от скорости системной шины, скорости памяти и особенно от видеокарты
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Апрель 28, 2005, 17:50 »

Погоди... я так понимаю, уважаемому надо, что это работало ПРОСТО БЫСТРЕЕ. А ведь не факт, что у пользователей его проги будет работоспособен Gl. Да и применение такой библиотеки для подобной задачи - дело весьма сомнительное ИМХО...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergeich
Гость
« Ответ #10 : Апрель 28, 2005, 18:10 »

На самом деле все зависит от задачи, если надо быстро перекидывать байты из памяти на экран, то лучше юзать OpenGL, т.к. он работает напрямую с буфером кадра. А по поводу работоспособности OpenGL: под виндой это вообще не проблема, под линухом конечно нужно ставить дрова, но по крайней мере для NVidia чипов с этим проблем нет и вроде в последнее время исчезли проблемы с ATI.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #11 : Апрель 28, 2005, 21:55 »

я вообще хотел способов типа

1. Использовать BitBlt. Я просто не очень понял, как его использовать

2. Использование HDC хендла возращаемого QPainter


У вас есть решения, основанные на этом подходе?
Записан
Keiko
Гость
« Ответ #12 : Апрель 28, 2005, 23:28 »

я эту проблему решил. Всё зависит от того, КАК ты получаешь картинку, которую надо вывести на экран. Если это простой несжатый RGB поток, и решение нужно только под X11, то нужно использовать MIT-SHM - в этом случае отрисовка летает. Если очень надо, могу прислать нужный класс [давай мейл].

P.S. Отрисовка QImage будет торомозить _всегда_, т.к. QImage сначала перегоняется в QPixmap, а потом только рисуется. Даже в доке написано, что такое преобразование очень медленное, да и ты сам можем убедиться, посетив qpixmap_x11.cpp из дистриба qt Улыбающийся
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #13 : Апрель 28, 2005, 23:33 »

а сюда можешь приатачить?

я думаю будет интересно всем!!
Записан
Keiko
Гость
« Ответ #14 : Апрель 28, 2005, 23:36 »

ктсати, setPixel делать не надо. у QImage есть конструктор, который позволяет создавать объект из несжатых данных (RGB/RGBA/Indexed):

Код:

QImage::QImage ( uchar * yourdata, int w, int h, int depth, QRgb * colortable, int numColors, Endian bitOrder )

Constructs an image w pixels wide, h pixels high with a color depth of depth, that uses an existing memory buffer, yourdata.

The buffer must remain valid throughout the life of the QImage. The image does not delete the buffer at destruction.

If colortable is 0, a color table sufficient for numColors will be allocated (and destructed later).

Note that yourdata must be 32-bit aligned.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.