我如何将VarBinary值转换为图像
本文关键字:转换 图像 VarBinary | 更新日期: 2023-09-27 18:07:53
我有一个表在我的数据库像这样:
Id | Description | Icon
,其中Icon
列的类型为varbinary(max)
我在这个表中有一行,其中Icon
列中的值显示在pastebin链接中(因为它是一个长值):
我正在尝试使用以下代码将这个varbinary值转换为我的程序中的图像:
var binary = new System.Data.Linq.Binary(GetBytes(StreamText)).ToArray();
using (MemoryStream stream = new MemoryStream(binary))
{
var image = new System.Drawing.Bitmap(stream);
image.Save(DownloadPath, ImageFormat.Png);
}
private byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
其中StreamText
为pastebin链接中的字符串
但是在var image...
行,我一直得到异常。
参数无效
我做错了什么?
问题是你的字符串是十六进制字符串,你试图将其转换为字节数组,如果它是ascii字符串。你可以使用任何方法,你可以在互联网上找到转换十六进制字符串到字节数组,像这样:
static void Main(string[] args)
{
var s = "your long hex string";
if (s.StartsWith("0x"))
s = s.Remove(0, 2);
using (var stream = new MemoryStream(ConvertHexStringToByteArray(s)))
{
var image = new Bitmap(stream);
image.Save(DownloadPath, ImageFormat.Png);
}
}
public static byte[] ConvertHexStringToByteArray(string hexString) {
if (hexString.Length%2 != 0) {
throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString));
}
byte[] HexAsBytes = new byte[hexString.Length/2];
for (int index = 0; index < HexAsBytes.Length; index++) {
string byteValue = hexString.Substring(index*2, 2);
HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
}
return HexAsBytes;
}