我尝试使用此代码执行此操作,但我在ArgumentException
函数中获得了带有“ms”的byteArrayToImage
。
byteArrayToImage
正常使用byte[]
,但是当我获得节点值时遇到了麻烦。
XML节点包含二进制代码。
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
foreach (var binary in xdoc.Root.Elements(ns + "binary"))
{
if (item.Value == "cover.jpg") MessageBox.Show(item.Value.ToString());
foreach (var binaryAttr in binary.Attributes())
{
if (binaryAttr.Value == "cover.jpg")
{
var s = GetBytes(binary.Value);
byteArrayToImage(s);
}
}
}
答案 0 :(得分:1)
“包含二进制代码”并不清楚你的意思。通常,XML中的二进制数据存储在Base64中......而您正在以一种几乎肯定不能在XML中工作的方式转换普通字符数据。
我怀疑您可以删除GetBytes
方法并使用
var bytes = Convert.FromBase64String(binary.Value);