Bitmap.Save时添加了ImageCodecInfo和EncoderParameters 两个参数时调用Save(string filename, ImageCodecInfo encoder, EncoderParameters? encoderParams)
或者只添加ImageFormat参数调用Save(string filename, ImageFormat format)
都会造成边界上几个像素失真
反而使用Bitmap.Save时不添加后面两个参数时 保存的结果 不会造成失真 但是图片大小从一开始102k变成了9k 应该图片质量发生了变化
private void button4_Click(object sender, EventArgs e)
{
imagePath = @"C:\Users\Administrator\Desktop\111.jpg";
Image img = Image.FromFile(imagePath,true);
Bitmap bitmap = new Bitmap(1024, 1024);
Graphics graph = Graphics.FromImage(bitmap);
graph.SmoothingMode = SmoothingMode.HighQuality;
graph.CompositingQuality = CompositingQuality.HighQuality;
graph.InterpolationMode = InterpolationMode.HighQualityBicubic;
graph.PixelOffsetMode = PixelOffsetMode.Half;
graph.DrawImage(img, new Rectangle(0, 0, 1024, 1024), 0, 0, 1024, 1024, GraphicsUnit.Pixel);
encoderParams = new EncoderParameters(1);
EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
encoderParams.Param[0] = encoderParam;
graph.Dispose();
bitmap.Save("C:/222.jpg", ImageFormat.Jpeg);
bitmap.Save("C:/333.jpg", imageCodecInfo, encoderParams);
bitmap.Save("C:/444.jpg");
}
原始图片
想要保证原来图片质量的情况下也保证边界像素不会失真
Bitmap.DecodeToWidth(imageStream, 400))