将字节数组转换为图像时出现参数无效的错误

4

我希望能够在Access数据库中保存图片,我使用了OLE对象。

思路是将图片转换为字节数组,然后添加字节数组到数据库中。

这是函数:

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

这个工作良好。

当我想将字节数组返回为图像时,会出现异常:

参数异常未处理 参数无效。

我尝试过两个函数来将字节数组转换为图像:

    public static Image ImageFromByte(byte[] image)
    {
        ImageConverter ic = new ImageConverter();
        Image img = (Image)ic.ConvertFrom(image);//here the exception comes
        return img;
    }

或:

    public static Image ImageFromByte1(byte[] byteArrayIn)
    {
        MemoryStream ms = new MemoryStream(byteArrayIn);
        Image returnImage = Image.FromStream(ms);//here the exception comes
        return returnImage;
    }

什么问题,如何解决?

你最开始是如何将其输入到数据库中的? - Science_Fiction
如果你为代码编写一个测试,并使用一些有效的位图进行测试,例如一个文件或者你刚刚绘制的一个,那么你会更好地了解问题出在哪里。我可以想到几种方式,将其放入或从数据库中提取可能出现问题。 - Tony Hopkinson
你的编辑中没有任何数据库的痕迹。 - Tony Hopkinson
如何将流写入磁盘? - Karam Najjar
我尝试使用位图,但是出现了相同的问题。 - Karam Najjar
显示剩余2条评论
1个回答

1
尝试将图像保存到磁盘上,看看是否有效。根据需要更改文件名和扩展名。 类似这样的操作:
            string path = @"c:\myimage.jpg";
            using (MemoryStream inputStream = new MemoryStream(byteArrayIn))
            {
                using (Stream file = File.Create(path))
                {
                    byte[] buffer = new byte[8 * 1024];
                    int len;
                    while ((len = inputStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        file.Write(buffer, 0, len);
                    }
                } 
            }

编辑:将图像写入磁盘是有效的,我想你可以看到这张图片。尝试这个:

            using (MemoryStream inputStream = new MemoryStream(byteArrayIn))
            {
                using (var image = Image.FromStream(inputStream))
                {
                    // see if this works.
                    // handle the image as you wish, return it, process it or something else.
                } 
            }

@KaramNajjar - 只需执行 return image;,你就可以继续进行了,或者还有其他问题吗? - scheien
在这一行代码 ::: using (var image = Image.FromStream(inputStream)) 抛出了异常,很抱歉我并不是说它适用于我的目的(第二个代码,但第一个代码运行良好),但是完全相同的异常出现了!!!感谢您的回复 :) - Karam Najjar
我在处理字节数组方面很新,我无法理解错误,我的问题是如何将图像保存在数据库中,是否有其他方法? - Karam Najjar
将图像保存到磁盘? :-) 这是我通常做的。 - scheien
Gmail用户:问题在于数据库是从另一台计算机访问的(通过发送电子邮件),如果调用路径,则对另一个用户无效。 - Karam Najjar
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接