Кадров в секунду с использованием класса DrawingContext WPF - PullRequest
1 голос
/ 19 июля 2010

У меня есть пример приложения, которое рисует прямоугольники, линии и т. Д., Используя экземпляр DrawContext переопределения OnRender класса Control. Этот элемент управления перерисовывается каждые 10 миллисекунд, вызывая InvalidateVisual (я могу опубликовать исходный код для всех, кто заинтересован). Я рассчитываю число кадров в секунду (FPS), измеряя время между каждым вызовом OnRender.

Однако этот показатель для FPS неверен. Просто взглянув на приложение, я вижу, что значение, указанное для FPS, превышает количество раз в секунду, которое приложение перерисовывает само. Это потому, что «Когда вы используете DrawingContext команды рисования объекта, вы фактически сохраняете набор инструкций рендеринга (хотя точный механизм хранения зависит от типа объекта, который предоставляет DrawingContext), который будет использоваться позже графической системой; вы не рисуете на экране в режиме реального времени. "

Итак, я хотел бы знать, есть ли какое-либо событие, на которое я могу подписаться, или каким-либо другим способом, чтобы определить, сколько раз в секунду мое приложение / элемент управления WPF генерирует новое растровое изображение и выводит его на экран? Есть ли какой-нибудь буфер растровых изображений, который хранится в «графической системе», к которому мы можем получить доступ?

Большое спасибо!

1 Ответ

2 голосов
/ 19 июля 2010

Вам необходимо использовать событие CompositionTarget.Rendering , которое вызывается для каждого кадра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...