Обновление производительности - Лучшая частота кадров в WPF

Я работаю в 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 как новый SetImageDelegate (AddressOuiGuiImageIn) Me.Dispatcher.Invoke (dl, imgSrc)

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

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

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

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

5
задан Community 23 May 2017 в 11:55
поделиться