使用内存流将二进制转换为位图

时间:2012-12-17 11:33:29

标签: c# .net

嗨我想将二进制数组转换为位图并在图片框中显示图像我写下面的代码,但我得到例外它说参数无效。

  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 个答案:

答案 0 :(得分:13)

这实际上取决于blob中的内容。它是一种有效的位图格式(如PNG,BMP,GIF等?)。如果它是关于位图中像素的原始字节信息,则不能这样做。

使用行mStream.Seek(0, SeekOrigin.Begin)之前的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;
    }
}

答案 1 :(得分:5)

不要丢弃MemoryStream。它现在属于图像对象,在处理图像时将被处理。

还要考虑这样做

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

答案 2 :(得分:0)

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

试试这个。如果您仍然收到任何错误或异常;请发布您要转换为图像的字节。你的图像流应该有问题......

答案 3 :(得分:0)

我不确定这些代码是否会对您有效,但您可以按照这样的说明进行操作;

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

Bitmap.FromResource;

  

从指定的Windows资源创建位图。