2012-01-20 73 views
33

我目前正在研究一种需要将未添加字节的数组高效转换为PNG或JPEG格式的应用程序。图像格式并不重要,只要速度很快。将字节数组转换为PNG/JPG

我试过.NET库,性能非常差。任何人都可以推荐一个好的免费软件库吗?

编辑:字节[]是一个8位灰度位图

+0

不清楚你的意思 - 这个字节数组是以什么开头的?你能提供更多细节吗? –

+0

你的问题并不完全清楚。 'byte []'代表什么?它是实际图像的内容吗?它是一个未压缩的位图,你想保存为JPG/PNG? – vcsjones

回答

55

你应该能够做这样的事情:

byte[] bitmap = GetYourImage(); 

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

here获取更多信息。

希望这会有所帮助。

+1

+1 ...几乎是通常的做法。不过,根据用户的需求,不需要将其保存到文件系统。 –

+0

完美。我喜欢它!这正是我正在寻找的。 –

+2

嗨,我试图类似的东西将原始图像转换为jpeg butgetting *参数无效*异常。有任何想法吗? 'byte [] bytes = System.IO.File.ReadAllBytes(@“C:\ Input.CR2”); (Image“= Image.FromStream(new MemoryStream(bytes))) image.Save(@”C:\ output.jpg“,ImageFormat.Jpeg); }' –

0
+0

我知道这是使用编程库,但在那种情况下,该工具的命令行是什么? – user2284570

+0

@ user2284570如果您在命令行上使用它,那么您将使用文件而不是字节数组。假设你的输入是PNG(一个PNG签名后跟着块),那么'convert input.png output.jpg'可能会起作用。 – ahoffer

1

有两个问题,这个问题:

假设你有一个灰度位图,你有两个因素需要考虑:

  1. 为JPG格式...什么质量的损失是可以容忍的?
  2. 对于PNG ...什么样的压缩级别是可以容忍的? (尽管对于我所见过的大多数事情,你没有太多的选择,所以这个选择可能可以忽略不计。)对于任何人都认为这个问题没有意义:是的,你可以改变压缩/尝试压缩的传球次数;查看Ifranview或其中的一些插件。

回答这些问题,然后您可能能够找到您的原始答案。