2009-02-24 24 views
12

Imageで表されるbyte[]があります。私はこのImageWebClientでダウンロードしています。 WebClientが画像をダウンロードしてURLを使用して参照すると、byte[]と表示されます。私の質問は、WPFのImage要素にbyte[]をロードするにはどうすればいいですか?ありがとうございました。実行時にイメージにバイト[]をロード

注::これは私がここで質問した質問に相補的です:Generate Image at Runtime。私はそのアプローチを働かせるように見えないので、私は別のアプローチを試みています。

+0

私は、System.Windows.Controls.Imageインスタンスにbyte []をロードしようとしています。誰もが親切に指摘しているSystem.Drawing.Imageインスタンスではありません。 – user70192

答えて

5

BitmapImageを使用して、StreamSourceをバイナリデータを含むストリームに設定することができます。私はそれが速いの両方になるようにそれを行う方法を考え出し

MemoryStream stream = new MemoryStream(bytes); 
21

以下のようMemoryStreamからBitmapImageを作成します。

MemoryStream byteStream = new MemoryStream(bytes); 
BitmapImage image = new BitmapImage(); 
image.BeginInit(); 
image.StreamSource = byteStream; 
image.EndInit(); 

そして、XAMLで、あなたはImageコントロールを作成することができますし、Sourceプロパティとして上記imageを設定します。

+0

それはWinFormsのためだけに働きませんか? – configurator

+0

答えを更新しました –

1

.NET Frameworkの4.0

using System.Drawing; 
using System.Web; 

private Image GetImageFile(HttpPostedFileBase postedFile) 
{ 
    if (postedFile == null) return null; 
    return Image.FromStream(postedFile.InputStream); 
} 
1

一つの方法:あなたがbyte[]からstreamを作りたい場合は、MemoryStreamを使用そして、次のされたスレッドセーフ:

var imgBytes = value as byte[]; 
if (imgBytes == null) 
    return null; 
using (var stream = new MemoryStream(imgBytes)) 
    return BitmapFrame.Create(stream,BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 

私はDBからVARBINARYとして画像を実行した後、私のWPFアプリケーションのためのコンバータにあることを投げました。

関連する問題