字节数组到图像保存会引发错误,如"参数无效"在C#中

时间:2016-05-26 06:15:07

标签: c# image bitmap

我可以看到这个问题被多次询问,但似乎没有一个是直截了当的回答。所以我发布了这个问题。

我正在从oracle数据库中读取BLOB到 photoByteArray [] 数组。 现在我只想将这个byte []保存到文件系统中 anyFileName.jpeg (或任何格式),但我得到"参数不是vaid &# 34;异常。

我尝试的是

int32

我的字节

Byte image

很少有人建议在字节数组中添加一些标头,但是如何以及如何删除这种标头并不是直接的方式。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

当我使用这样的东西时:

Image img = Image.FromFile(@"C:\a.png");
            byte[] arr;
            using (MemoryStream ms = new MemoryStream())
            {
                img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                arr = ms.ToArray();
            }
            using (var ms = new System.IO.MemoryStream(arr))
            {
                using (var img1 = Image.FromStream(ms,false,true)) // error thrown here as 'parameter is not valid'
                {
                    img1.Save("D:\\anyFileName.png", ImageFormat.Png);
                }
            }

将图像文件转换为字节,并使用您的方法将该字节数组转换为图像,使其正常工作。

但是当我将该byteArray的某个字节更改为0(零)时(例如前15个字节),我得到了您的错误。

所以可以得出结论,你的字节数组确实没有正确的格式,一些概率是:

  1. 您正在将错误的字节数组保存到数据库中(对于
    列的示例数据类型不合适。)
  2. 从DB获取字节数组时你犯了一些错误。
  3. 我不知道的其他一些原因。