0

目前我正在测试一个脚本,该脚本试图保存从十六进制字符串转换的图像文件,但是,当我尝试执行保存命令时,会出现参数无效。

        // 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;
    }

目前我还在寻找是什么原因造成的,请指教。

4

2 回答 2

0

看来您需要将传入的字符串从 Base64 转换为字节数组,如下所示:

byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
于 2013-05-07T03:16:51.997 回答
0

正如评论中提到的,您的位图格式是错误的,您所拥有的只是一些随机的十六进制数据,并且该Bitmap.FromStream方法不知道如何处理它。如果您查看这个讨论如何使用十六进制编辑器创建位图文件的链接BitmapHeader,它会讨论、BitmapInfoHeaderPixel 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);
于 2013-05-07T03:53:53.713 回答