在c#中使用Image Converter从Image到Byte数组转换失败

时间:2013-06-01 04:58:12

标签: c# image conventions

我将我的图像从图片框转换为字节数组

   public static byte[] ImageToByte(Image img)
    {
        ImageConverter converter = new ImageConverter();
        return (byte[])converter.ConvertTo(img, typeof(byte[]));
    }

然后将字节数组转换为图像

  public static Image byteArrayToImage(byte[] imageData)
    {
        try
        {
            Image image;
            using (MemoryStream inStream = new MemoryStream())
            {
                inStream.Write(imageData, 0, imageData.Length);
                image = Bitmap.FromStream(inStream);
            }
            return image;
        }
        catch { throw; }
    }

这是我保存数据之前的第一次,我将文件从本地系统上传到图片框

       openFileDialog1.Filter = "JPG Files (*.jpg)|*.jpg|JPEG Files (*.jpeg)|*.jpeg";
        if (openFileDialog1.ShowDialog() != DialogResult.Cancel)
        {

            Image pic = Image.FromFile(openFileDialog1.FileName);
            pboxPhoto.Image = pic;
        }

第一次将数据保存到数据库时,它正在100%工作。当我检索数据时,我将数据从重新获得的字节数组转换为Image并附加到picturebox.Everything直到现在都可以。现在我想更新所有记录,这次ImagetoByte arrat方法抛出异常

A generic error occurred in GDI+.

所以我的问题是当我从本地系统上传图像时正在转换但是当我将字节数组转换为Image然后尝试将图像转换为字节数组时,抛出异常的方法。谢谢..

1 个答案:

答案 0 :(得分:1)

问题是,当您处置byteArrayToImage时,您会在MemoryStream中关闭位图的基础流。

您不得使用Bitmap.FromStream执行此操作,因为其文档的说明是

  

您必须在图像的生命周期内保持流打开。

Image.FromFile行为相似,它会保持文件锁定,直到图像被丢弃。