目前我正在测试一个试图保存从HEX字符串转换的图像文件的脚本,但是,当我尝试执行Save命令时,参数无效。
// Some junk hex image data
string hexImgData = @"FFD8FFE000104A46494600010200006400640000FFFFD9";
// Call function to Convert the hex data to byte array
byte[] newByte = ToByteArray(hexImgData);
MemoryStream memStream = new MemoryStream(newByte);
// Save the memorystream to file
Bitmap.FromStream(memStream).Save("C:\\img.jpg");
// Function converts hex data into byte array
public static byte[] ToByteArray(String HexString)
{
int NumberChars = HexString.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
{
bytes[i / 2] = Convert.ToByte(HexString.Substring(i, 2), 16);
}
return bytes;
}
目前我仍然在寻找导致此问题的原因,请提供建议。
答案 0 :(得分:0)
似乎你需要将传入的字符串从Base64转换为字节数组,如下所示:
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
答案 1 :(得分:0)
正如评论中提到的,你的位图格式是错误的,你只有一些随机的十六进制数据,Bitmap.FromStream
方法不知道如何处理它。如果您查看讨论如何使用十六进制编辑器创建位图文件的link,则会讨论BitmapHeader
,BitmapInfoHeader
和Pixel RGB Data
。我能够通过从他们的示例中获取数据并使用它来使用您的代码创建一个位图。
string bitmapHeader = "424D860000000000000036000000";
string bitmapInfoHeader = "280000000500000005000000010018000000000050000000C40E0000C40E00000000000000000000";
string pixelData = "0000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF00";
string hexImgData = bitmapHeader + bitmapInfoHeader + pixelData;
// Call function to Convert the hex data to byte array
byte[] newByte = ToByteArray(hexImgData);
MemoryStream memStream = new MemoryStream(newByte);
pictureBox1.Image = Bitmap.FromStream(memStream);