2009-07-29 3 views
4

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

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

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

+0

Является ли метод Convert самой высокой эффективностью при каждом запуске, или он слишком часто опрошен? Мне любопытно, может ли пользовательский элемент управления справиться с этим, это лучший подход (поскольку это постоянный поток изображений). –

+0

Предлагает любые элементы управления custome/thirdparty ... или мы можем передавать потоки растровых изображений –

ответ

3

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

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

+0

Спасибо за ответ ... У меня действительно нет доступа к GetMeImage() и возвращает только Bitmap :(Код должен запускаться каждые 500 мс ... –

Смежные вопросы