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中获取字节数组
您看到的十六进制值不是联系人的显示图像。它是显示图像的散列。获取显示图片的逻辑如下
- 登录 XMPP 客户端后,您开始接收来自 XMPP 服务器的状态消息。
- 在状态消息中,您会收到头像的哈希值。
- 检查您的本地存储,如果您有针对接收到的哈希的二进制图像。
- 如果您有针对哈希的二进制图像,则从本地存储在您的客户端上显示头像。
- 如果您没有针对哈希的二进制图像,请向 XMPP 服务器发送 v-card 请求,针对您收到存在的用户。
- 收到 v-card 响应后,您将找到哈希和显示图像二进制文件。将其存储在一些本地存储中。
有关 XMPP 数据包的详细信息,请阅读 http://www.xmpp.org/extensions/xep-0153.html#retrieve
上的第 3.2 节
我正在尝试从 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中获取字节数组
您看到的十六进制值不是联系人的显示图像。它是显示图像的散列。获取显示图片的逻辑如下
- 登录 XMPP 客户端后,您开始接收来自 XMPP 服务器的状态消息。
- 在状态消息中,您会收到头像的哈希值。
- 检查您的本地存储,如果您有针对接收到的哈希的二进制图像。
- 如果您有针对哈希的二进制图像,则从本地存储在您的客户端上显示头像。
- 如果您没有针对哈希的二进制图像,请向 XMPP 服务器发送 v-card 请求,针对您收到存在的用户。
- 收到 v-card 响应后,您将找到哈希和显示图像二进制文件。将其存储在一些本地存储中。
有关 XMPP 数据包的详细信息,请阅读 http://www.xmpp.org/extensions/xep-0153.html#retrieve
上的第 3.2 节