如何序列化system.Drawing.Image到c#中的流?

时间:2011-03-29 16:42:30

标签: c# image serialization

我有一个Image对象img,我需要将它保存到内存流中。

保存方法有这个签名:

Image.Save(Stream,ImageCodecInfo,EncoderParameters)

但我不知道我在参数2和3中提供了什么。

我使用BinaryFormmater序列化解决问题,但我想使用最合适的方法。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

有一个更简单的重载:Image.Save(Stream, ImageFormat)。第二个参数允许您选择要保存图像的格式,如BMP,PNG或JPEG。

image.Save(stream, ImageFormat.Bmp); // if you need to access the pixels, perhaps
image.Save(stream, ImageFormat.Png); // lossless compression (good for drawings)
image.Save(stream, ImageFormat.Jpeg); // lossy but powerful compression (good for photos)

答案 1 :(得分:1)

This link拥有您需要的信息。在该页面上,他们将此列为获取ImageCodecInfo的最简单方法:

public static ImageCodecInfo FindEncoder(ImageFormat format) { 
    if (format == null)
        throw new ArgumentNullException("format");

    foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders()) {
        if (codec.FormatID.Equals(format.Guid)) {
            return codec;
        }
    }

    return null;
}