Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2013, 15:37   #1
hamster28
Пользователь
 
Регистрация: 14.06.2013
Сообщений: 11
По умолчанию

Добрый день.
написал приложение на c++ cli с использованием windows forms. устраивает все, кроме скорости отрисовки на picturebox. отрисовываю, создавая заранее битмап и заполняя его попиксельно.
в winforms радует простота использования кнопок и всего готового.
если я правильно понимаю, то с использованием Qt я получу тоже самое. те простота использования, но такая же система отрисовки.
Вычитал, что для повышения скорости рисования чего-либо стоит использовать либы. например SDL.
но вот вопрос, что мне с ним делать?
впихнуть SDL_surface в свою форму, я так понимаю, не могу. или могу? если та, то как?
отрисовывать все элементы управления в окне, созданном SDL - вроде это очень долго. есть еще какие-то дополнительные либы для отрисовки элементов упарвления, но я не разобрался пока, какие, как используются и тп.
Поэтому ОСНОВНОЙ ВОПРОС - подскажите, что в данных случаях логичнее всего делать, по какому пути пойти? внедрять либы отрисовки в управление или либы по созданию элементов управления в приложение, в основе которого библиотека рисования?
или есть другие варианты?
Спасибо.

дополнение
общая задача - потоковое считывание данных с usb порта в матрицу и вывод значений этой матрицы в виде черно-белой картины (яркость пикселей зависит от размера значений в матрице, а положение точек на картине - положение значений в матрице). дополнительно есть вывод графиков из тех же значений (по одной строке матрицы). и куча кнопок управления устройством, подключенным по usb.

Последний раз редактировалось Stilet; 10.07.2013 в 18:00.
hamster28 вне форума Ответить с цитированием
Старый 10.07.2013, 17:45   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в Qt есть модуль QtGL что позволит применить видеокарту для отрисовки.
в WinForms тоже какие то либы видел подобные.
SDL, как вариант тоже.

а по задаче, вам надо оптимизировать таки рисование, такими темпами, у вас все равно упрется в проц, даже при работе с видяхой.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2013, 20:08   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Если надо попиксельно, то никакой GL не спасет...
Быстрее всего будет выделить память, записывать все пикселы напрямую а потом уже из этой памяти делать картинку и кидать на екран. Поскольку все данные под своим контролем можно будет сэкономить кучу проверок и вычислений адресов.
waleri вне форума Ответить с цитированием
Старый 10.07.2013, 21:33   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Если надо попиксельно, то никакой GL не спасет...
Быстрее всего будет выделить память, записывать все пикселы напрямую а потом уже из этой памяти делать картинку и кидать на екран. Поскольку все данные под своим контролем можно будет сэкономить кучу проверок и вычислений адресов.
лучше сразу создать DIBitmap.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2013, 22:36   #5
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

эмм...омм...картинки размер уменьшить никак?качество ухудшить? рисовать в отдельном потоке(пока рисуется, буфер копится в очередь)?
Ещё вариант GPU использовать наример через OpenCL.
do not use your brain

Последний раз редактировалось Кащей; 10.07.2013 в 23:01.
Кащей вне форума Ответить с цитированием
Старый 10.07.2013, 23:10   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Кащей Посмотреть сообщение
эмм...омм...картинки размер уменьшить никак?качество ухудшить? рисовать в отдельном потоке(пока рисуется, буфер копится в очередь)?
Ещё вариант GPU использовать наример через OpenCL.
OpenCL для вычислений, а не рисований.
попиксельное рисование в данном случае практически не ускорить, а насчет потока мысль уже допустимая.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2013, 23:21   #7
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

Так он же в память рисует попикслельно, это же тоже как массив заполнить а потом выгрузить, так почему же это рисование не ускорить на GPU? или я чтото не понял? или его устройство через USB данные медленно передаёт что и ускорять нечего?
Читаю и вижу что он матрицу заполняет, хомяк, почитай доку, мож можно сразу подходящую матрицу сделать чтобы не отрисовывать её попиксельно, а вывалить как буфер с картинкой?
do not use your brain
Кащей вне форума Ответить с цитированием
Старый 10.07.2013, 23:36   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Так он же в память рисует попикслельно, это же тоже как массив заполнить а потом выгрузить, так почему же это рисование не ускорить на GPU? или я чтото не понял? или его устройство через USB данные медленно передаёт что и ускорять нечего?
там все равно управление от CPU остается, что мы скорее всего получим лишь проигрыш производительности, а не выигрыш.
тем более OpenCL не даст рисовать это сразу, это уже к шейдерам разве что.
Цитата:
Читаю и вижу что он матрицу заполняет, хомяк, почитай доку, мож можно сразу подходящую матрицу сделать чтобы не отрисовывать её попиксельно, а вывалить как буфер с картинкой?
я уже сказал про DiBitmap.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2013, 23:39   #9
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

ладно, молчу.
do not use your brain
Кащей вне форума Ответить с цитированием
Старый 11.07.2013, 09:40   #10
hamster28
Пользователь
 
Регистрация: 14.06.2013
Сообщений: 11
По умолчанию

ухудшать и уменьшать картинку не могу. с многопоточностью пока не работал. это в крайнем случае, над этим думал, но руки пока не дошли разобраться.
Цитата:
Быстрее всего будет выделить память, записывать все пикселы напрямую а потом уже из этой памяти делать картинку и кидать на екран. Поскольку все данные под своим контролем можно будет сэкономить кучу проверок и вычислений адресов.
а каким образом выделить память? под что?
Цитата:
лучше сразу создать DIBitmap.
а чем этот DIBitmap отличается от обычного bitmap? в данный момент я создаю битмап, в него записываю цвета, вычисленные из матрицы, а сам битмап вывожу на экран раз в несколько периодов. самое затратное, как я понял, это запись в битмап. так?
++ в настоящее время собираюсь переползать с винды на линукс + qt. в этом случае что лучше всего использовать?
hamster28 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отрисовка графика на C++ Angriff Visual C++ 0 12.12.2012 18:31
Отрисовка легенды Алек JavaScript, Ajax 2 08.12.2011 16:38
Скорость рисования и остальная скорость ZotaC Gamedev - cоздание игр: Unity, OpenGL, DirectX 121 13.11.2010 22:51
отрисовка updown edik Компоненты Delphi 0 27.12.2009 12:39
Тест на скорость вывода графики mutabor Gamedev - cоздание игр: Unity, OpenGL, DirectX 23 23.02.2008 22:03