将字节数组转换为System.Drawing.Image时出错

时间:2014-07-07 10:13:49

标签: c# mysql

我正在使用C#4.5 Framework和MySql

MySqlDataReader reader = Command.ExecuteReader();

if (reader.Read())
{

   byte[] ReturnImage = reader["Photo"] as byte[];

   MemoryStream ms = new MemoryStream(ReturnImage);

   Image Photo = Image.FromStream(ms);  //Error is in this statement!! 
}

执行此stmt时,以下错误显示“参数无效”

我无法从网上找到答案。有人请帮助..

1 个答案:

答案 0 :(得分:1)

这里最可能的原因是longblob的内容原始图像字节。不要绕圈子,首先要做的是:比较它们。例如,您说(评论)数据来自jpg文件,通过OpenFileDialog。在这种情况下,比较它们。检查您是否已成功存储并检索图像。

让我们假设有问题的文件是c:\Some\Photo.jpg - 存储等等。在这种情况下,您应该能够检查内容是否相同。在以下报告成功之前,所有投注都已关闭

byte[] original = File.ReadAllBytes(@"c:\Some\Photo.jpg");
byte[] ReturnImage = reader["Photo"] as byte[];

if(Convert.ToBase64String(original) == Convert.ToBase64String(ReturnImage)) {
    Console.WriteLine("Success; the contents match");
} else {
    Console.WriteLine("Failure; the contents are different");
}

如果报告“失败;内容不同”,则错误最有可能出现在:

之一
  • 准备要存储的图像的代码(填充参数等)
  • 执行存储的存储过程
  • 从数据库中取回图像的代码

如果报告“成功;内容匹配”:那么只有才能查看尝试加载Image的代码。在这种情况下,假设c:\Some\Photo.jpg加载大多数其他图像加载工具(“绘图”等) - 那么可能 Image无法识别子格式。但我的猜测是它会说“失败;内容不同”。

请注意,Convert.ToBase64String此处仅用作检查二进制等效性的惰性方法。您不会在生产代码中使用它,但它可以用于此目的。