Лучший способ отобразить изображение в WPF - PullRequest
4 голосов
/ 29 июля 2009

В настоящее время я работаю над проектом ультразвукового сканирования, который отображает непрерывные изображения, полученные с зонда, для этого я пишу следующий код.

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;
}

Этот метод стоит мне много (производительность), Есть ли лучший способ сделать это ??

1 Ответ

3 голосов
/ 29 июля 2009

Поскольку вы уже устанавливаете 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?

Кроме того, как часто выполняется ваш первый фрагмент кода? Возможно, вы захотите изменить это или позволить ему изменяться, когда это необходимо.

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