C#Bitmap.Save保存图片后边界失真

问题遇到的现象和发生背景

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");
        }

运行结果及报错内容

原始图片

img


使用Save(string filename, ImageCodecInfo encoder, EncoderParameters? encoderParams)

img


使用Save(string filename, ImageFormat format)

img


使用Save(string filename)

img

我的解答思路和尝试过的方法
我想要达到的结果

想要保证原来图片质量的情况下也保证边界像素不会失真

Bitmap.DecodeToWidth(imageStream, 400))