我正在使用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时,以下错误显示“参数无效”
我无法从网上找到答案。有人请帮助..
答案 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
此处仅用作检查二进制等效性的惰性方法。您不会在生产代码中使用它,但它可以用于此目的。