位图之间的区别.保存过载

本文关键字:保存 区别 之间 位图 | 更新日期: 2023-09-27 17:50:19

我在看不同的方式,我可以保存一个位图对象到内存流,我不确定我应该选择哪种方法。

特别让我感兴趣的两个是:

1)

Bitmap.Save(Stream, ImageFormat)

2)

Bitmap.Save(Stream, ImageCodecInfo, EncoderParameters)

场景如下:

我有一个方法,以。bmp格式接收图像,在我执行调整大小逻辑之后,我将这个新的调整大小的位图对象保存回jpg格式的内存流。我使用了这两种方法,它们都给了我编码的jpg等效。

方法1的逻辑

Bitmap srcBitmap = new Bitmap(m_testImage);
//perform resize
var imageStream = new MemoryStream();
srcBitmap.Save(imageStream, ImageFormat.Jpeg);
imageStream.Position = 0L;

方法2的逻辑

Bitmap srcBitmap = new Bitmap(m_testImage);
myjpegEncoder = ImageCodecInfo.GetImageDecoders().FirstOrDefault(codec => codec.FormatID == ImageFormat.Jpeg.Guid);
encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80L);
var imageStream = new MemoryStream();
srcBitmap.Save(imageStream, myjpegEncoder, encoderParams);
imageStream.Position = 0L;

这两种方法的主要区别是什么?

msdn: http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.save (v = vs.110) . aspx

位图之间的区别.保存过载

当使用方法2保存时,您可以更改质量,颜色深度或压缩等

第一个是JPEG的预定义方法。另一个是更通用的版本。例如,对于尚未直接可用的未来图像格式,如第一个示例