15

嗨,我想将二进制数组转换为位图并在picturebox. 我编写了以下代码,但出现异常,表明参数无效。

  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

3 回答 3

19

这真的取决于blob. 它是否是有效的位图格式(如 PNG、BMP、GIF 等?)。如果它是有关位图中像素的原始字节信息,则不能那样做。

mStream.Seek(0, SeekOrigin.Begin)在 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;
    }
}
于 2012-12-17T11:39:05.740 回答
5

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

也考虑这样做

var ms = new MemoryStream(blob);
var img = Image.FromStream(ms);
.....
img.Dispose(); //once you are done with the image.
于 2012-12-17T11:38:24.030 回答
0
System.IO.MemoryStream mStrm = new System.IO.MemoryStream(your byte array);
Image im = Image.FromStream(mStrm);
im.Save("image.bmp");

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

于 2012-12-17T11:46:51.120 回答