尝试保存从字节转换的图像时出现“参数无效”错误

时间:2013-05-07 03:02:09

标签: c# visual-studio-2010 image

目前我正在测试一个试图保存从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;
    }

目前我仍然在寻找导致此问题的原因,请提供建议。

2 个答案:

答案 0 :(得分:0)

似乎你需要将传入的字符串从Base64转换为字节数组,如下所示:

byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);

答案 1 :(得分:0)

正如评论中提到的,你的位图格式是错误的,你只有一些随机的十六进制数据,Bitmap.FromStream方法不知道如何处理它。如果您查看讨论如何使用十六进制编辑器创建位图文件的link,则会讨论BitmapHeaderBitmapInfoHeaderPixel 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);