Обновление производительности - лучшая частота кадров изображения в WPF - PullRequest
5 голосов
/ 22 июня 2011

Я работаю в WPF в .Net 4.0.У меня есть несколько огромных изображений с камеры 1392x1040 пикселей.Каждый кадр имеет вид System.Drawing.Bitmap и будет преобразован в BitmapImage с помощью

Public Function BitmapToWpfBitmapSource(ByVal bmSrc As System.Drawing.Bitmap) As BitmapSource
                    If bmSrc Is Nothing Then Return Nothing
                    Dim res As BitmapSource
                    Dim Ptr As IntPtr
                    Ptr = bmSrc.GetHbitmap(System.Drawing.Color.Black) 'Create GDI bitmap object
                    res = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(Ptr, IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(bmSrc.Width, bmSrc.Height))
                    Dim ret As Integer = DeleteObject(Ptr) 'Delete GDI bitmap object
                    GC.Collect() 'Because the code is not managed, we need to call the collector manually to avoid memory spikes
                    Return res
End Function

. Если я обновлю изображения в графическом интерфейсе, я получу около 7 кадров / секунду.

image framerate count

Существовали некоторые возможности для увеличения скорости за счет снижения качества:

  • Визуализация с ближайшим соседом

RenderOptions.SetBitmapScalingMode(Me.ucWindow1.VideoPresenter1.img1, BitmapScalingMode.NearestNeighbor)

  • Работа с потоками для обновления каждого кадра

    Dim dl As New SetIImageDelegate (AddressOf UpdateImageInGuiGuiThread) Me.Dispatcher.Invoke (dl, imgSrc)

  • Протестировано с32-битные и 24-битные изображения - сравнить формат изображения

Использование Пакет профилирования производительности для частоты кадров

Но процессор все еще около 10%, а не 100%, а частота кадров составляет максимум 12 кадров в секунду вместо 39 (Winforms).

Как улучшить частоту кадров с камеры?

Ответы [ 2 ]

2 голосов
/ 08 сентября 2012

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

1 голос
/ 22 июня 2011

Если процессор равен 10%, то происходит что-то кроме обработки вашего изображения. Я подозреваю, что ответ на ваш вопрос - это то, что вы не упомянули здесь. например, чтение с диска или чтение с камеры.

...