2009-07-29 17 views
4

Momentan arbeite ich an einem Ultraschall-Scan-Projekt, das die fortlaufenden Bilder anzeigt, die von einer Sonde stammen. Dazu schreibe ich den folgenden Code.Die beste Methode zum Anzeigen von Bildern in WPF

XAML:

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

C# Aufgabe:

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

Diese Methode mich viel (Performance) kostet, ist es eine bessere Art und Weise zu TU es??

+0

Ist die Convert-Methode selbst sehr kostenaufwendig oder wird sie nur zu oft abgefragt? Ich bin gespannt, ob ein benutzerdefiniertes Steuerelement, um dies zu handhaben, der bessere Ansatz wäre (da es ein konstanter Strom von Bildern ist). –

+0

Ich würde vorschlagen, Custome/Third Party Controls ... oder können wir die Bitmap-Bilder streamen –

Antwort

3

Da Sie bereits die DataContext in Code (nicht XAML) einstellen, warum nicht einfach ein paar Schritte überspringen?

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; 

Wenn Sie Zugriff auf GetMeImage() haben, können Sie es ändern zu prüfen, besser in Ihre Anwendung passen - Funktioniert es wirklich brauchen eine Bitmap zurückzukehren?

Wie oft wird Ihr erstes Stück Code ausgeführt? Sie sollten in Erwägung ziehen, das zu ändern oder es bei Bedarf variieren zu lassen.

+0

Danke für die Antwort ... Ich habe wirklich keinen Zugriff auf GetMeImage() und gibt nur Bitmap :(Der Code muss alle 500ms laufen ... –

Verwandte Themen