![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
BerdArt |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
Здравствуйте!
Есть у меня несколько вопросов по рисованию... 1. У меня есть массив, в котором хранятся различные графические объекты (эллипс, прямоугольник, ромб и т.д.). В обработчике Paint PictureBox'а я перебираю весь этот массив и вызываю у каждого объекта метод Show. В самом начале пытаюсь удалить прежнее содержимое , но не получается - все остается на прежних местах. Т.е. допустим если я переместил какой-то объект, то он появился на новом месте как объект(т.е. я могу его выделить, удалить и т.п.), но старые тоже остался, но только уже просто в виде фигуры (т.е. его я не могу не схватить, не переместить не удалить). Делаю я это все след. образом:
2. Если я вот таким образом рисую то у меня загрузка ЦП = 100% и выделение памяти максимальное (1200МБ). Что я делаю не так? Кстати, рисует отлично, без всяких глюков и миганий. Если я Graphics возьму непосредственно от PictureBox'a, то появятся миганию, задержи прорисовки и куча подобных глюков. Но проц не загружается так сильно, хотя первая проблема остается в силе.
3. Если же я заменю PictureBox Panel'ом, то мигания некорые остаються, хотя и не такие сильные. Но так как похоже на Panel загрузить битмап не получится, то приходиться рисовать на Graphics'е взятом непосредственно от панели.
И опять же первая проблема в силе. Заранее благодарен. Суважением, BerdArt |
||||||
|
|||||||
BerdArt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
Все, вопрос решен.
Кстати, хочется отметить, на счет рисования на форме. Встречал в интернете (и на этом форуме, в частности) вопросы по поводу мигания изображения при перерисовки и большой загрузки процессора. Так вот, решение этой проблемы следующее:
Немного прокомментирую, точнее отмечу важные моменты: 1. Рисуйте не на контексте устройства (не на самом pictureBox'е), а на битмапе. И только потом закидывайте его в pictureBox. 2. Используйте двойную буферизацию (строка 9). 3. Загружайте битмап не через свойство Image pictureBox'a, а с помощью метода DrawImage (строка 20). 4. Все виртуальное рисование (т.е. на битмапе) можете выполнять где вам удобно. А загружайте в pictureBox только при перерисовки - в событии Paint. Если нужно где-то сделать силовую перерисовку, то вызывайте метод pictureBox1.Invalidate(). Всем успехов! Это сообщение отредактировал(а) BerdArt - 19.9.2008, 20:15 |
|||
|
||||
Angelius |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 30.8.2008 Где: Местный я! Репутация: нет Всего: нет |
BerdArt
спасибо за инфу! =) на днях пригодится! |
|||
|
||||
BerdArt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
Всегда пожалуйста;)
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |