2016-09-28 6 views
1

私はbase64でgifイメージを持っています。gifファイルをbase64からpictureboxに読み込む方法は他にありますか? C#

現在、私はこのように近づいています。 base64 gifファイルを読み込んでバイト配列に書き込み、それをディスクへのイメージファイルに書き戻し、ファイルからpicturebox.imageに読み込みます。

byte[] imageBytes = Convert.FromBase64String(body); 
       //* this is write file to disk and read 
       string filename = Username; 
       File.WriteAllBytes(filename, imageBytes); 
       fs = new FileStream(filename, FileMode.Open, FileAccess.Read); 
       pictureBox1.Image = Image.FromStream(fs); 

ここで、ディスクファイルに書き込まずにメモリに書きたいと思います。可変イメージのようなものです。ピクチャボックスに割り当てることができます。これは可能ですか?なぜなら、私は多くの画像に対して何度も何度もやらなければならないからです。

私は、ファイルをディスクに保存してもう一度読むことなく、別の方法を見つけたいと思います。

助けてください。

答えて

1
byte[] imageBytes = Convert.FromBase64String(body); 
MemoryStream stream = new MemoryStream(imageBytes); 
pictureBox1.Image = Image.FromStream(stream); 
+0

ありがとうございます。できます。 –

1
byte[] imageBytes = Convert.FromBase64String(body); 
using (var ms = new MemoryStream(imageBytes)) 
{ 
    pictureBox1.Image = Image.FromStream(ms); 
} 

あなたがそれをDispose()必要がありますのでMemoryStreamクラスはIDisposableをで注意してください。これは、tryを使用して/ catch/finallyブロックで発生する可能性があります。

+1

'MemoryStream'は抽象クラス' Stream'から継承されているため、 'IDisposable'となっています。これはMicrosoftが' IDisposable'を作成するほど愚かだったため、階層内のすべてのクラスも 'IDisposable'になります。しかし、 'MemoryStream'はあなたが決してそれを処分しなければ、うまく動作します。 –

+1

@MikeNakis大したことはありませんが、私は同意することができます。この場合Disposeを呼び出すと、MemoryStreamで使用されているメモリをもっと速くクリーンアップすることはできません。しかし、あなたのIDisposableクラスを常に廃棄することは良い習慣です。将来的には、処分する必要がある資源を追加することも可能である。ストリームから読み書きする必要がなくても、将来的に大きなトラブルを避けることができれば、これは害にならないでしょう。 – mybirthname

+0

Mike Nakisご意見ありがとうございます。習慣で私はstream.close()を追加し、gdiエラーが出ました。私は戻ってあなたのコメントを読む。 stream.close()を削除しました。エラーなしで正常に動作します。どうもありがとうございました。 –

関連する問題