好吧,我试图在xml文件中收集编码为十六进制字符串的图片。我一直在寻找答案,并且无法在任何地方找到它。 这就是我现在所拥有的。
byte[] bytes = Convert.FromBase64String(FilterResults("PHOTOGRAPH"));
MemoryStream mem = new MemoryStream(bytes);
Image bmp2 = Image.FromStream(mem);
return bmp2;
FilterResults函数只返回XML中的字符串。 我能够获取字符串并将其转换为byte []但是只要我执行Image.FromStream(mem),我就会收到“参数错误”错误。
有什么想法吗?
答案 0 :(得分:3)
代码段是正确的(尽管MemoryStream
实现了IDisposable
,因此应该包含在using
块中。
Image.FromStream如果无法识别流中的图片格式,则仅会引发ArgumentException
。因此,除非你没有展示一些代码,否则问题必须与图像本身有关。
为了确保代码正确无误,请在位于硬盘驱动器上的实际图像文件上使用以下测试程序:
string imageBase64;
using (Image image = Image.FromFile(@"C:\path_to_image.jpg"))
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Jpeg);
imageBase64 = Convert.ToBase64String(ms.ToArray());
}
}
Console.WriteLine(imageBase64.Length);
byte[] imageData = Convert.FromBase64String(imageBase64);
using (MemoryStream ms = new MemoryStream(imageData))
{
using (Image image = Image.FromStream(ms))
{
Console.WriteLine(image.Width);
}
}