2009-07-29 6 views
4

Actuellement, je travaille sur un projet d'analyse échographique, qui affiche les images continues acquises à partir d'une sonde, pour ce faire, j'écris le code suivant.Meilleure façon d'afficher l'image dans WPF

XAML:

<Image Name="imgScan" DataContext="{Binding}" Source="{Binding Path=prescanImage,Converter={StaticResource imgConverter}}" /> 

C# Affectation:

Bitmap myImage = GetMeImage(); 
imageMem = new MemoryStream(); 
myImage .Save(imageMem, ImageFormat.Png); 
imgScan.DataContext = new { prescanImage = imageMem.ToArray() }; 

Converter:

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

Cette méthode me coûte beaucoup de (performance), est-il une meilleure façon de fais le??

+0

La méthode Convert elle-même coûte-t-elle beaucoup de performance à chaque exécution, ou est-elle simplement en train d'être interrogée trop souvent? Je suis curieux de savoir si un contrôle personnalisé pour gérer cela serait la meilleure approche (car il s'agit d'un flux constant d'images). –

+0

Suggérerait des contrôles custome/thirdparty ... ou pouvons-nous diffuser les images bitmap –

Répondre

3

Puisque vous définissez déjà le DataContext dans le code (pas xaml), pourquoi ne pas simplement passer quelques étapes?

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; 

Si vous avez accès à GetMeImage(), vous voudrez peut-être envisager de modifier pour mieux intégrer dans votre application - Est-il vraiment besoin de retourner un Bitmap?

De même, à quelle fréquence votre première pièce de code est-elle exécutée? Vous voudrez peut-être modifier cela, ou lui permettre de varier quand il le faut.

+0

Merci pour la réponse ... Je n'ai vraiment pas accès à GetMeImage() et renvoie seulement Bitmap :(Le code doit s'exécuter toutes les 500ms ... –

Questions connexes