Я использую библиотеку AForge.NET для периодического получения данных изображения с моей веб-камеры. По причинам отладки мне приходится выводить отфильтрованные изображения на экран. В настоящее время у меня есть 6 изображений WPF в моей основной форме, и каждую секунду я обрабатываю событие, которое дает мне UnmanagedImage, которое я конвертирую в System.Drawing.Bitmap, а затем в BitmapSource - мой код выглядит примерно так:
private void OnImageFiltered(object sender, FilterEventArgs e)
{
var bitmapSource = e.UnmanagedImage.ToManagedImage().ToBitmapSource();
pictureBox.Source = bitmapSource;
}
Но, как я уже говорил, у меня 6 изображений, и это замедляет работу всей программы. Как я могу сделать это быстрее?
Мой метод расширения ToBitmapSource находится здесь:
public static BitmapSource ToBitmapSource(this System.Drawing.Image source)
{
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(source);
var bitSrc = bitmap.ToBitmapSource();
bitmap.Dispose();
bitmap = null;
return bitSrc;
}
bitmap.ToBitmapSource()
является наиболее дорогостоящим компонентом, однако вы, вероятно, можете сэкономить небольшое количество накладных расходов, используя конструктор логического параметра, напримерvar bitmapSource = e.UnmanagedImage.ToManagedImage(false).ToBitmapSource();
. Поскольку это управляется событиями, это, вероятно, уже происходит в фоновом потоке, верно? - person Mike Guthrie   schedule 29.05.2012BitmapSource
в фоновом потоке, а затем установите толькоpictureBox.Source
черезDispatcher.Invoke
. - person Mike Guthrie   schedule 30.05.2012