HPC.ru lite - Все форумы
Форум: Программирование для КПК
Тема: "продвинутое рисование на форме"
Страницы: [1] 2

[Ответить]
apachik [12.04.2006 03:48] "продвинутое рисование на форме":
дано:
VS 2005 NET CF

нужно:
каждую секунду рисовать много-много всего на экране и так, чтобы не моргало.

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

вопрос: как это сделать?
ВадимП [12.04.2006 04:10] :
плохая идея
apachik [12.04.2006 17:17] :
ну предложи другую тогда. мне не так важно, чтобы изображение мгновенно прорисовывалось, нужно чтобы оно быстро менялось и не было мерцания экрана.

нужно типа двойная буферизация вывода на экран. как это делается?
Ginger [12.04.2006 17:22] :
Акуеннограмматный ответ! Жаль, что я так не могу! =)
В который раз уже убеждаюсь, что от этого товарисча не бывает толковых ответов - умен больно, блин, не для нашего уровня!

А по твоему вопросу, я бы хотел добавить, что под .Net ничего нельзя писать критичного по времени - уж больно много у нее прослоек (сюда же входит и без нее не быстрый GDI), пока до железа дойдет - пройдет столько времени, что даже человеку заметно.

Для организации backbuffer я бы посоветовал GAPI или на худой конец BITMAP из GDI, хотя полседний так же очень медленный, что бы через него рисовать быстро на экране.
ВадимП [12.04.2006 19:17] :
Вот именно - нужна именно двойная буферизация. Могу рассказать как это делается для Linux-КПК и сильно сомневаюсь, что ее нет на winmobile.
sshd [12.04.2006 22:06] :
а почему ты тогда сказал "плохая идея"?
он вроде и описал двойную буферизацию:
"рисовать на битмапе, а потом выводить на экран"
apachik [13.04.2006 00:27] :
про тормознутость я знаю, но она меня вполне устраивает.
ну и пусть медленно рисует, мне нужно чтобы быстро меняло.
времени изучать GAPI совсем нету (я пробежался и понял, что там много всего всего).
с битмапом вроде попроще работать будет?
только вот мне на нем не отдельные пиксели ставить, а фигуры рисовать с заливкой, писать самому эти функции понятное дело подходит.

много кода нужно для реализации двойной буферизации?
научите пожалуйста! я в программировании под КПК совсем новичек, справку VS, MSDN читать на англ. не напрягает, но вот разбираться с новой технологией времени вообще нет.
ВадимП [13.04.2006 01:40] :
Насколько я понял первоначальное предложение, речь шла о формировании изображения в некотором буфере в системной памяти, которое затем обычной memcpy() копируется в кадровый буфер видеокарты (который у большинства КПК также находится в системной памяти).
Этот процесс, синхронизированный по времени с сигналом вертикального обратного хода луча (луча, правда, в LCD-мониторах давно нет, но сигнал остался), тоже иногда называли раньше двойной буферизацией.
Но сейчас этот термин всё-таки больше закрепился за тем, что в стародавние времена обзывали "page flipping":
И я не вижу абсолютно никаких преимуществ в первом предложенном варианте - напротив, только недостатки в частности за счет дополнительных потерь времени на копирование.
Переключать буфера на мой взгляд гораздо удобнее и проще.
(никаких проблем с созданием необходимого числа буферов и свободным переключением между ними, по крайней мере, на Linux-КПК нет - начало отображаемой части видеопамяти определяется указателем screen_base, который используется низкоуровневым драйвером кадрового буфера).
Ginger [13.04.2006 10:14] :
Про CF не скажу так ли это делается или нет, но для GDI выглядит все просто:
HDC memDC = CreateCompatibleDC ( hDC );
HBITMAP memBM = CreateCompatibleBitmap ( hDC, nWidth, nHeight );
SelectObject ( memDC, memBM );
hDC - как понимаешь, тот DC в котором должен быть виден конечный результат пользователю.
Все теперь можешь рисовать на memDC, а результат будет храниться в memBM.
Когда заканчиваешь рисовать, то BitBlt копируешь memDC на тот DC который у тебя на экране. все.
apachik [13.04.2006 10:58] :
мне на другом форуме подсказали:
работает . только вот DrawImage тормозит. можно побыстрее сделать?
[Ответить]
[Вперед >]