Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert binary to bitmap using memory stream

Tags:

c#

.net

Hi I wanna convert binary array to bitmap and show image in a picturebox. I wrote the following code but I got exception that says that the parameter is not valid .

  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;

    }
like image 871
heavy Avatar asked Dec 17 '12 11:12

heavy


2 Answers

It really depends on what is in blob. Is it a valid bitmap format (like PNG, BMP, GIF, etc?). If it is raw byte information about the pixels in the bitmap, you can not do it like that.

It may help to rewind the stream to the beginning using mStream.Seek(0, SeekOrigin.Begin) before the line Bitmap bm = new Bitmap(mStream);.

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;
    }
}
like image 186
Thorsten Dittmar Avatar answered Nov 04 '22 23:11

Thorsten Dittmar


Don't dispose of the MemoryStream. It now belongs to the image object and will be disposed when you dispose the image.

Also consider doing it like this

var ms = new MemoryStream(blob);
var img = Image.FromStream(ms);
.....
img.Dispose(); //once you are done with the image.
like image 28
juharr Avatar answered Nov 05 '22 00:11

juharr