我正在研究将位图对象保存到内存流的不同方法,我不确定应该选择哪种方法。
这两个特别引起我兴趣的是:
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
答案 0 :(得分:1)
使用方法2保存时,可以更改质量,颜色深度或压缩等。
答案 1 :(得分:-1)
第一个是JPEG的预定义方法。 另一个是更通用的版本。例如对于未来的图像格式,如第一个样本中那样尚未直接提供