Лучший способ отображения изображения в WPF
-
05-07-2019 - |
Вопрос
В настоящее время я работаю над проектом ультразвукового сканирования, который отображает продолжающиеся изображения, полученные от зонда, для этого я пишу следующий код.
XAML:
<Image Name="imgScan" DataContext="{Binding}" Source="{Binding Path=prescanImage,Converter={StaticResource imgConverter}}" />
Присвоение C#:
Bitmap myImage = GetMeImage();
imageMem = new MemoryStream();
myImage .Save(imageMem, ImageFormat.Png);
imgScan.DataContext = new { prescanImage = imageMem.ToArray() };
Преобразователь:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && value is byte[])
{
byte[] ByteArray = value as byte[];
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.StreamSource = new MemoryStream(ByteArray);
bmp.EndInit();
return bmp;
}
return null;
}
Этот метод обходится мне дорого (производительность), есть ли лучший способ сделать это??
Решение
Поскольку вы уже устанавливаете DataContext
в коде (не xaml) почему бы просто не пропустить несколько шагов?
Bitmap myImage = GetMeImage();
imageMem = new MemoryStream();
myImage.Save(imageMem, ImageFormat.Png);
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.StreamSource = new MemoryStream(imageMem.ToArray());
bmp.EndInit();
imgScan.Source = bmp;
Если у вас есть доступ к GetMeImage()
, возможно, вы захотите рассмотреть возможность изменения его, чтобы он лучше вписывался в ваше приложение - действительно ли ему нужно возвращать Bitmap
?
Кроме того, как часто выполняется ваш первый фрагмент кода?Возможно, вы захотите рассмотреть возможность изменения этого или позволить ему меняться, когда это необходимо.