Вопрос

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

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?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top