2009-07-29 20 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()にアクセスできず、ビットマップのみを返します(コードは500msごとに実行されています... –

関連する問題