Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как ускорить 2D рисование 
:(
    Опции темы
qpeHukc
Дата 10.4.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Нужно организовать скроллер, на котором отображать некоторые данные.

Рисую Image на pictureBox-e. По мере прокрутки, сдвигаю Image и дорисовываю в конец данные.

Непонятка заключается в том, что нужно отрисовывать как минимум 1 000 000 точек в 50 миллисекунд,
а такое количество точек отрисовывается только в треть секунды где-то.

Посоветуйте как ускорить процесс ?

Не сталкивался никогда с DirectX. Может ли он мне помоч ?
PM MAIL ICQ   Вверх
Ch0bits
Дата 10.4.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 1
Всего: 62



Первым делом можно добавить вот такую строчку для твоего контрола:
Код

this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);


Цитата(qpeHukc @ 10.4.2006, 14:56 Найти цитируемый пост)
как минимум 1 000 000 точек

Ты рисуешь графику по точкам на весь экран?

PM WWW   Вверх
qpeHukc
Дата 10.4.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(Ch0bits @ 10.4.2006, 17:58)
Цитата(qpeHukc @  10.4.2006,  14:56 Найти цитируемый пост)
как минимум 1 000 000 точек

Ты рисуешь графику по точкам на весь экран?

нет, у меня полоска. её размер зависит от того, насколько окно развернуто.
В зависимости от развернутости окна точки накладываются друг на друга плотнее или свободнее.
У точек разное значение альфа канала.

Это сообщение отредактировал(а) qpeHukc - 10.4.2006, 18:19
PM MAIL ICQ   Вверх
mr.DUDA
Дата 10.4.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



"Рисуй" в буфер (в массив) и перекидывай в битмап. Это быстрее, чем Bitmap.SetPixel и аналогичные методы Graphics-а.


--------------------
user posted image
PM MAIL WWW   Вверх
qpeHukc
Дата 12.4.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(mr.DUDA @ 10.4.2006, 19:04)
"Рисуй" в буфер (в массив) и перекидывай в битмап. Это быстрее, чем Bitmap.SetPixel и аналогичные методы Graphics-а.

попробовал реализовать рисование при помощи BitmapData.

скорость не значительно увеличилась.
PM MAIL ICQ   Вверх
Ch0bits
Дата 13.4.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 1
Всего: 62



qpeHukc
Я думаю в каждом конкретном случае должна быть своя оптимизация.
Ты говоришь что рисуешь кривую с бешанным количеством точек, может стоит попробовать уменьшить количество точек, а кривую выводить с помошью линейной интерполяции. Хотя и будет немного угловато, а если процессор позволит, то можно и сплайновую использовать.

Что касается Managed DX - я его плохо знаю, т.к. нету SDK, но если хочешь могу написать пример быстрого вывода на OpenGL (CsGL wrapper).
PM WWW   Вверх
qpeHukc
Дата 13.4.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(Ch0bits @ 13.4.2006, 10:37)
qpeHukc
Я думаю в каждом конкретном случае должна быть своя оптимизация.
Ты говоришь что рисуешь кривую с бешанным количеством точек, может стоит попробовать уменьшить количество точек, а кривую выводить с помошью линейной интерполяции. Хотя и будет немного угловато, а если процессор позволит, то можно и сплайновую использовать.

Что касается Managed DX - я его плохо знаю, т.к. нету SDK, но если хочешь могу написать пример быстрого вывода на OpenGL (CsGL wrapper).

у меня не кривая, а скорее такие тучи точек smile

разрешили сегодня несколько уменьшить количество точек, но всё развно не успеваю

скачал DireсtX SDK, попробую в нем полазить

Это сообщение отредактировал(а) qpeHukc - 13.4.2006, 18:38
PM MAIL ICQ   Вверх
mr.DUDA
Дата 14.4.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



qpeHukc, что означает "туча точек" ? Ты что, в случайные позиции выводишь точку ?


--------------------
user posted image
PM MAIL WWW   Вверх
qpeHukc
Дата 20.4.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



нет, я так сказал просто чтобы понятнее было как у меня выглядит график.


кто-нить может посоветовать пример по использованию Surface - ов и вообще про все дела с ним связанные (всякие там DoNotWait,NoSystemLock) ато пишу наобум  smile  ?
в DirectX SDK есть кое что в сэмплах, но там не особо информативно для моего случая.

и еще кое что - хочу достать данные сурфэйса для обработки вот так : 

Код

byte[] surfaceData = offscreen.Lock(rectangleToGet,LockFlags.DoNotWait);


пишется : Cannot implicitly convert type 'byte[*,*]' to 'byte[]'

что за byte[*,*] ?
 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 24.4.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Цитата(qpeHukc @  20.4.2006,  16:13 Найти цитируемый пост)
что за byte[*,*] ?

двумерный массив байтов 


--------------------
user posted image
PM MAIL WWW   Вверх
qpeHukc
Дата 24.4.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



ага, разобрался уже с этим

еще бы понять в каком порядке там точки расположены

мне надо массив ARGB точками заполнить 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0983 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.