Рендеринг 2D примитивов в режиме прокрутки - PullRequest
1 голос
/ 22 августа 2009

Каков наилучший подход для визуализации большого количества двумерных графических элементов (линий, текста, фигур и т. Д.) В прокручиваемом виде на окнах с использованием C #?

Ответы [ 2 ]

3 голосов
/ 22 августа 2009

Вы можете поместить PictureBox (любого необходимого общего размера) на панель с AutoScroll, установленной в True, а затем нарисовать все, что вам нужно, сразу на PictureBox, используя объект Graphics.

Однако, если общий размер поверхности рисования очень велик, этот подход не будет практичным (поскольку это будет означать наличие огромного PictureBox и соответственно огромного битмапа, который может занимать большой объем памяти). Если бы это было так, вам лучше создать собственный прокручиваемый пользовательский элемент управления (горизонтальный и вертикальный) и отображать только видимую часть общей поверхности в событии Paint элемента управления.

Первый подход будет проще и быстрее писать, но может потребовать слишком много памяти. Второй подход потребует дополнительной работы с вашей стороны, но сведет к минимуму потребление памяти.

0 голосов
/ 01 июня 2012

Существует элемент управления scrollviewcontainer, но по умолчанию его нет на панели инструментов. Я бы применил описанный выше подход к графическому блоку и вставил его в этот элемент управления. Также вы можете использовать SetStyle, чтобы включить двойную буферизацию для предотвращения мерцания. Другой вариант - создать класс для обработки двойной буферизации (отрисовать растровый объект и вытолкнуть результаты с помощью CreateGraphics). Есть несколько хороших примеров.

...