2016-09-07 20 views
1

私はC#、wpfを使用しています。フォーム上バイト[]byte []の画像を表示

public interface IFile 
{ 
    int Id { get; set; } 
    byte[] FileData { get; set; }   
    string FileName { get; set; } 
    int? FileSize { get; set; } 
    string FileExtension { get; set; } 
} 

私は私の画像を表示するにはどうすればよい(FILEDATA バイト[]):私はイメージ、それはの形式で格納されていますか?

<GroupBox BorderThickness="1"> 
    <Image Source="..."/> 
</GroupBox> 

私はバイト[]からの一時ファイルを作成する場合、私は、Source="..."に書くことがありますか?あなたはIFileインタフェースを実装するビューモデルのクラスを持っていることを

+1

WPF内蔵提供するので、型変換いくつかのソースタイプ( 'byte []'を含む)から 'ImageSource'まで、' 'と書くだけです。バイト配列は、符号化された画像バッファを含まなければならない。 PNGまたはJPEG。 – Clemens

+1

バインディングを使用するには、Imageコントロール(または親コントロールまたはMainWindowのいずれか)のDataContextを、IFileインターフェイスを実装するクラスのインスタンスに設定する必要があります。 – Clemens

+0

クレメンス、ありがとう!本当に動作します! – Olga

答えて

3

が設けられており、そのFileDataプロパティはPNGやJPEGなどの符号化された画像バッファが含まれていることを、あなたは直接このようなプロパティにバインドすることができます:

<Image Source="{Binding FileData}"/> 

これは、WPFがbyte[]ImageSourceなど、いくつかのソースタイプから組み込みの自動型変換を提供するためです。


型変換をにTypeConverter

[TypeConverterAttribute(typeof(ImageSourceConverter))] 
public abstract class ImageSource ... 

として登録し、これに類似した何かをしているクラスImageSourceConverter、によって行われる。

byte[] buffer = ... 
ImageSource result; 
using (var stream = new MemoryStream(buffer)) 
{ 
    result = BitmapFrame.Create(
     stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
}