C# 参数无效异常

C# Parameter is not Valid Exception

我正在尝试从 google 谈话中获取头像。 我从 goole talk 服务器收到数据包,如:

<presence from="xxxxxxxxxxxxx@gmail.com/MessagingA3e8c9465" to="xxxxxxxxxx@gmail.com/Jabber.NetF5D1AB65">
<show>away</show>
<caps:c ver="1.1" node="http://www.android.com/gtalk/client/caps" xmlns:caps="http://jabber.org/protocol/caps" />
<x xmlns="vcard-temp:x:update">
    <photo>6373f2ccdf12ef06292ca2257dc0bdc9aa1040c2</photo>
</x>

我以为'<photo>'标签的十六进制值是联系人的头像(显示图像)。 (如有错误请指正)

我将该值转换为 byte[] 并使用以下代码显示图像。

pictureBox1.Image = Image.FromStream(new MemoryStream(byte_array));
// byte_array is byte[] converted from hex value.

它引发异常说:

Parameter is not valid.

我正在使用以下函数从十六进制转换为字节[]:

private static byte[] HexString2Bytes(string hexString)
{
    int bytesCount = (hexString.Length) / 2;
    byte[] bytes = new byte[bytesCount];
    for (int x = 0; x < bytesCount; ++x)
    {
        bytes[x] = Convert.ToByte(hexString.Substring(x * 2, 2), 16);
    }

    return bytes;
}

我尝试了很多方法,但结果相同。

我也尝试将十六进制值转换为大写,但没有成功,结果相同。

我在 windows 8.1 机器上使用 .net 3.5。

谢谢

更新: 感谢大家的评论和回答。

错了十六进制值不是头像(显示图像)。

我向服务器发送了 'iq' 请求,它给出了头像。

非常感谢。 快乐编码。

http://www.xmpp.org/extensions/xep-0153.html 表示如下:

Next, the user's client computes the SHA1 hash of the avatar image data itself (not the base64-encoded version) in accordance with RFC 3174 [4]. This hash is then included in the user's presence information as the XML character data of the child of an element qualified by the 'vcard-temp:x:update' namespace, as shown in the following example:

Example 3. User's Client Includes Avatar Hash in Presence Broadcast

所以,''标签的十六进制值基本上不是头像,而是头像图像的 SHA1 哈希值。

根据this, the photo is Base64-encoded. So you simple need to call Convert.FromBase64String从图片元素InnerText中获取字节数组

您看到的十六进制值不是联系人的显示图像。它是显示图像的散列。获取显示图片的逻辑如下

  1. 登录 XMPP 客户端后,您开始接收来自 XMPP 服务器的状态消息。
  2. 在状态消息中,您会收到头像的哈希值。
  3. 检查您的本地存储,如果您有针对接收到的哈希的二进制图像。
  4. 如果您有针对哈希的二进制图像,则从本地存储在您的客户端上显示头像。
  5. 如果您没有针对哈希的二进制图像,请向 XMPP 服务器发送 v-card 请求,针对您收到存在的用户。
  6. 收到 v-card 响应后,您将找到哈希和显示图像二进制文件。将其存储在一些本地存储中。

有关 XMPP 数据包的详细信息,请阅读 http://www.xmpp.org/extensions/xep-0153.html#retrieve

上的第 3.2 节