【问题标题】:How to convert raw data to JPEG file using C#如何使用 C# 将原始数据转换为 JPEG 文件
【发布时间】:2018-04-18 15:36:56
【问题描述】:

我有这样一个字符串:

string x = 0x424D3630090000000000360010028000000C00100200011111111111333333333000000C40E0000C40E000000088888888BBBBCC262281FF231F7EFF251D81FF....."

我被告知要将此字符串转换为 JPEG 图像,但我不确定此字符串的实际数据类型,也不知道如何将其转换为 JPEG。你能给我一些关于这方面的建议吗?提前致谢。

编辑:

我像这样将字符串转换为字节数组:

 byte[] bytes = Convert.FromBase64String("0x424D363009..");

我得到了这个例外:

Base-64 字符数组或字符串的长度无效。

【问题讨论】:

  • 将其转换为一组字节,然后您就可以“在 C# 中将字节转换为 jpeg”,其中 Stack Overflow 上有很多问题和答案。
  • 对c#不太熟悉,但是,这好像是十六进制字符串,所以先了解如何将十六进制字符串转换为字节数组,然后将字节数组转换为图像
  • 查看前两个十六进制值 - 0x42 0x4D - 我猜该字符串是一个 BitMap 文件 - 在转换为字节数组后应该给出一个起点。
  • 它不是一个 base 64 字符串 - 每对字符代表一个 8 位值 - 所以你的数组应该是 - 0x42, 0x4D, 0x36, 0x30 .....所以你可能需要手动转换每一对字符。查看您的字符串,我认为那里有错误,因为我希望 00,00,00,28 跟随 36 - 另请参阅:asecuritysite.com/forensics/bmp?file=activated.bmp

标签: c# image binary file-conversion


【解决方案1】:

更新:

另一种可能的解决方案,您可以使用以下 HEX 字符串获取 byte[]

string x = GetYouHexString();
x = x.Remove(0,2);
string[] stringArr = Enumerable.Range(0, x.Length / 2)
                               .Select(i => x.Substring(i * 2, 2))
                               .ToArray();
byte[] byteArr = Array.ConvertAll(stringArr , b => Convert.ToByte(b, 16));

然后使用MemoryStreamImage 保存它:

using(Image image = Image.FromStream(new MemoryStream(byteArr)))
{
    image.Save("output.jpg", ImageFormat.Jpeg);
}

【讨论】:

  • 这给出了“参数无效”。此行错误:using(Image image = Image.FromStream(new MemoryStream(byteArr)))
  • @jason 你在哪里测试的?
  • 在 Visual Studio 上。
  • 如果您的字符串如上 - 那么它可能是不正确的,因为它有错误的标题信息 - 正如我上面所说的,我希望在第二个 36 之后出现 00000028。
  • 我已经创建了控制台应用程序并进行了测试,效果很好。
猜你喜欢
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2017-11-27
相关资源
最近更新 更多