C# 从XML中的十六进制字符串获取JPEG图像
好了,我正在尝试收集一张在xml文件中编码为十六进制字符串的图片。我一直在寻找这个问题的答案,但在任何地方都找不到。 这是我现在拥有的C# 从XML中的十六进制字符串获取JPEG图像,c#,xml,image,C#,Xml,Image,好了,我正在尝试收集一张在xml文件中编码为十六进制字符串的图片。我一直在寻找这个问题的答案,但在任何地方都找不到。 这是我现在拥有的 byte[] bytes = Convert.FromBase64String(FilterResults("PHOTOGRAPH")); MemoryStream mem = new MemoryStream(bytes); Image bmp2 = Image.FromStream(mem); return bmp2; FilterResults函数只
byte[] bytes = Convert.FromBase64String(FilterResults("PHOTOGRAPH"));
MemoryStream mem = new MemoryStream(bytes);
Image bmp2 = Image.FromStream(mem);
return bmp2;
FilterResults函数只返回XML中的字符串。
我能够获取字符串并将其转换为字节[],但一旦执行Image.FromStream(mem),我就会得到一个“参数不正确”错误
有什么想法吗?代码片段是正确的(尽管
MemoryStream
实现了IDisposable
,因此应该使用块包装在中)
仅当无法识别流中的图像格式时,才会抛出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);
}
}
假设FilterResults正确返回字符串(这可能是因为如果它不是有效的base64,FromBase64String将引发异常),我看不出您的代码有任何错误。您确定数据实际上是JPEG图像吗?你能把XML文件上传到某个地方吗?它只是没有编码为包含图像头的图像。发布您看到的前8个字节的值。以下是来自文档/数据块ffd8ffe0的前8个字节