从XML中的十六进制字符串获取JPEG图像

时间:2010-04-04 13:34:12

标签: c# xml image

好吧,我试图在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),我就会收到“参数错误”错误。

有什么想法吗?

1 个答案:

答案 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);
    }
}