【问题标题】:hex value not writing to image十六进制值未写入图像
【发布时间】:2015-08-08 13:40:39
【问题描述】:

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

我正在使用的代码是:

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

}

任何帮助将不胜感激

【问题讨论】:

  • 它不是一个有效的 jpg 图像...

标签: c# rtf memorystream


【解决方案1】:

如果您只想获取一个十六进制字符串并将其转储到文件中,则无需通过将其包装在 MemoryStreamImage 中来使其过于复杂。只需将字节直接写入文件即可:

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

您收到错误的原因正如 Ron 评论的那样;您提供的十六进制字符串不能形成有效的 JPEG 图像。

【讨论】:

  • 我想我应该扩展我的问题。我正在尝试将 rtf 文件中的十六进制字符串转换为图像,该图像将通过来自 syncfusion 的 DocIO 以编程方式放入 Word 模板中。这是一个典型的转换问题,我觉得也许我一开始就计划的事情过于复杂......
  • 我将把你的答案标记为答案,因为它符合我的要求。我将开始一个关于syncfusion DocIO和rtf的新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多