2012-12-17 4 views
6

こんにちは私はバイナリarreyをビットマップに変換して、ピクチャボックスに画像を表示したいです。次のコードを書きますが、parametrが無効であるという例外があります。メモリストリームを使ってバイナリをビットマップに変換する

public static Bitmap ByteToImage(byte[] blob) 
    { 
     MemoryStream mStream = new MemoryStream(); 
     byte[] pData = blob; 
     mStream.Write(pData, 0, Convert.ToInt32(pData.Length)); 
     Bitmap bm = new Bitmap(mStream); 
     mStream.Dispose(); 
     return bm; 

    } 
+4

なぜバイト配列をコピーしていますか?なぜ?using(MemoryStream mStream = new MemoryStream(blob);){return new Bitmap(mStream);} –

+0

イメージをストリームに変換し、varbinaryとしてデータベースに保存したいですか? – Dev

+0

いいえ私はデータベースからそれを読んでピックボックスに表示したいです – heavy

答えて

7

ようにそれを行うことを検討します。有効なビットマップ形式(PNG、BMP、GIFなど)ですか?それがビットマップのピクセルに関する生のバイト情報であれば、そのようにすることはできません。

Bitmap bm = new Bitmap(mStream);の前にmStream.Seek(0, SeekOrigin.Begin)を使用してストリームを先頭に巻き戻すと便利です。

public static Bitmap ByteToImage(byte[] blob) 
{ 
    using (MemoryStream mStream = new MemoryStream()) 
    { 
     mStream.Write(blob, 0, blob.Length); 
     mStream.Seek(0, SeekOrigin.Begin); 

     Bitmap bm = new Bitmap(mStream); 
     return bm; 
    } 
} 
+1

[この却下された編集](http://stackoverflow.com/review/suggested-edits/3181577)をご覧ください。 [msdn](http://msdn.microsoft.com/en-us/library/system.io.memorystream.seek.aspx)から、彼が正しいように見えます。 – gunr2171

4

MemoryStreamを処分しないでください。これはイメージオブジェクトに属し、イメージを破棄するときに破棄されます。

はまた、それが本当にblobであるかに依存し、この

var ms = new MemoryStream(blob); 
var img = Image.FromStream(ms); 
..... 
img.Dispose(); //once you are done with the image. 
+0

私は自分のコードを取得しますargumanexeptioninはこのコードでは無効です。ビットマップbm =新しいビットマップ(mStream)。 – heavy

+0

@ user1512368どの行ですか? – juharr

+2

これは正しくありません!ストリームとバイト情報は「画像オブジェクトに属しません」。メモリリークを起こさないためには*ストリームを処理する必要があります。 –

0
System.IO.MemoryStream mStrm = new System.IO.MemoryStream(your byte array); 
Image im = Image.FromStream(mStrm); 
im.Save("image.bmp"); 

これを試してみてください。それでもエラーや例外が発生した場合は、イメージに変換しようとしているバイトを投稿してください。画像ストリームに問題があるはずです。

+0

私もそれを行うが、パラメータが有効な例外ではない – heavy

+0

あなたのバイトをここに文字列に変換して投稿できますか? –

+0

イメージバイトはどのようにデータベースに入りますか?あなたは*実際には、データベースのバイトがPNG、GIF、BMPなどの形式のイメージを表していると確信していますか?そうでなければ、 'Bitmap'コンストラクタを使うことはできません。 –

0

このコードはあなたのためにはうまくいかないが、このような指示に従うことができます。

byte[] pData = blob; 
MemoryStream ms = new MemoryStream(pData); 
return Bitmap.FromResource(ms); 

指定したWindowsリソースからビットマップを作成します。

関連する問題