十六进制值不写入图像

时间:2015-08-08 03:34:21

标签: c# rtf memorystream

我正在尝试构建一个更大的工具,它将从.RTF格式获取十六进制字符串并将它们转储到文件中。这种从内存流写入文件的尝试抛出了类型为'System.InvalidOperationException'的异常。在ReadTimeout和WriteTimeout上。我相信,我有点过头了。

我正在使用的代码是:

 private void button_Click(object sender, RoutedEventArgs e)
    {

            // Image hex 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
            Image image = Image.FromStream(memStream, false, false);

                image.Save(@"C:\img.jpg");
            memStream.Close();
            image.Dispose();
    }

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

}

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

如果你想做的只是取一个十六进制字符串并将其转储到一个文件中,就不需要将它包装在MemoryStream然后Image中,使其过于复杂。只需将字节直接写入文件:

File.WriteAllBytes(@"C:\img.jpg", newByte);

你得到错误的原因是罗恩评论的;您提供的十六进制字符串不会形成有效的JPEG图像。