C#: 如何将位图字节数组转换为JPEG格式?

25

如何使用 .net 2.0 将以字节数组格式表示的位图转换为 JPEG 格式?

3个回答

44

你指的是什么类型的byte[]?原始文件流数据吗?如果是这种情况,可以尝试使用以下代码(在客户端应用程序中使用 System.Drawing.dll ):

    using(Image img = Image.FromFile("foo.bmp"))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }

如果你确实有一个 byte[],那么可以使用FromStreamnew MemoryStream(arr)

    byte[] raw = ...todo // File.ReadAllBytes("foo.bmp");
    using(Image img = Image.FromStream(new MemoryStream(raw)))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }

第二个正是我正在寻找的。 不过,我正在将其写入另一个 MemoryStream 而不是文件中。 谢谢! - Marc

4
如果只是一个原始像素数据的缓冲区,而不是完整的图像文件(包括头文件等,如JPEG),那么您无法使用Image.FromStream。
我认为你可能在寻找的是System.Drawing.Bitmap.LockBits,返回System.Drawing.Imaging.ImageData;这提供了使用指向内存的指针读取和写入图像像素的访问方式。

-4
public static Bitmap BytesToBitmap(byte[] byteArray)
{
  using (MemoryStream ms = new MemoryStream(byteArray))
  {
    Bitmap img = (Bitmap)Image.FromStream(ms);
    return img;
  }
}

这是一个位图。他想要一个JPEG。 - AnthonyBlake
代码还不完整,但它会返回一个位图,稍后您可以将其保存为任何格式的文件...我猜这是我在声望战中的首秀...无论如何,这是我的错。 - jdearana
@juanjo.arana,你没有回答他的问题,只是告诉了他如何获取位图。 - gbjbaanb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接