【发布时间】:2014-03-14 02:55:00
【问题描述】:
我正在研究将位图对象保存到内存流的不同方法,但我不确定应该选择哪种方法。
让我特别感兴趣的两个是:
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
【问题讨论】: