0

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

   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% 工作。当我检索数据时,我将数据从检索的字节数组转换为图像并附加到图片框。到目前为止一切正常。现在我想更新所有记录,这次 ImagetoByte arrat 方法抛出异常

A generic error occurred in GDI+.

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

4

1 回答 1

1

问题是您在byteArrayToImage处置MemoryStream.

你不能这样做,Bitmap.FromStream因为它的文件的评论说

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

Image.FromFile行为类似,它保持文件锁定直到图像被释放。

于 2013-06-01T05:55:59.853 回答