Как рисование с DrawingContext в OnRender работает за сценой? - PullRequest
2 голосов
/ 01 марта 2012

Я рисую довольно сложное «изображение» (которое часто нуждается в обновлении и имеет много примитивов рисования) в окне WPF, переопределяя метод OnRender отдельного UIElement и используя DrawingContext для непосредственного рисования примитивов.

Мой вопрос: что именно происходит за кулисами?Насколько я понимаю, это не использование сохраненного режима (что было бы в случае, если бы я помещал Shapes в элемент управления).Я задаю вопрос, потому что я обеспокоен тем, что для рисования, подобного этому, на самом деле будет использоваться только GDI + сзади, что имеет свои собственные проблемы (например, печать, нарисованная с помощью GDI +, уже стоила нам времени и усилий).

Есть ли какие-нибудь хорошие ресурсы (кроме очевидных ресурсов MSDN, которые, кажется, не смогли меня просветить?

Или я все понял неправильно?

Спасибо за любые ответы, указывающие на меняправильное направление. [править: правописание]

1 Ответ

1 голос
/ 11 февраля 2013

Вы все еще используете режим удержания, вы просто не используете высокоуровневые объекты (без объектов анимации и т. Д.), А вместо этого простые точки, линии и т. Д.

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

WPF затем обрабатывает эту очередь в другом потоке, обозначенном потоком рендеринга в этом вопросе. Я не проверял это, но я предполагаю, что WPF использует StreamingContext для всего своего рисования.

Кроме того, WPF использует DirectX для рендеринга, что видно по этому bogpost, который лучше смотрит на то, что на самом деле делает WPF.

Надеюсь, это прояснит для вас вещи.

...