使用宽高比和裁剪中心图像调整C#中的图像,使其没有间隙

我正在尝试将用户上传的图像调整为横向尺寸,例如450w和250h,同时保持纵横比,但是要避免resize的图像,如肖像图像侧面有间隙,我想裁剪图像的中心以填充resize的尺寸。

我已经找到了大量的代码来调整图像大小同时保持纵横比但不是我想要的,我希望有人可以提供帮助。

你应该传递needToFill = true:

public static System.Drawing.Image FixedSize(Image image, int Width, int Height, bool needToFill) { #region calculations int sourceWidth = image.Width; int sourceHeight = image.Height; int sourceX = 0; int sourceY = 0; double destX = 0; double destY = 0; double nScale = 0; double nScaleW = 0; double nScaleH = 0; nScaleW = ((double)Width / (double)sourceWidth); nScaleH = ((double)Height / (double)sourceHeight); if (!needToFill) { nScale = Math.Min(nScaleH, nScaleW); } else { nScale = Math.Max(nScaleH, nScaleW); destY = (Height - sourceHeight * nScale) / 2; destX = (Width - sourceWidth * nScale) / 2; } if (nScale > 1) nScale = 1; int destWidth = (int)Math.Round(sourceWidth * nScale); int destHeight = (int)Math.Round(sourceHeight * nScale); #endregion System.Drawing.Bitmap bmPhoto = null; try { bmPhoto = new System.Drawing.Bitmap(destWidth + (int)Math.Round(2 * destX), destHeight + (int)Math.Round(2 * destY)); } catch (Exception ex) { throw new ApplicationException(string.Format("destWidth:{0}, destX:{1}, destHeight:{2}, desxtY:{3}, Width:{4}, Height:{5}", destWidth, destX, destHeight, destY, Width, Height), ex); } using (System.Drawing.Graphics grPhoto = System.Drawing.Graphics.FromImage(bmPhoto)) { grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic; grPhoto.CompositingQuality = CompositingQuality.HighQuality; grPhoto.SmoothingMode = SmoothingMode.HighQuality; Rectangle to = new System.Drawing.Rectangle((int)Math.Round(destX), (int)Math.Round(destY), destWidth, destHeight); Rectangle from = new System.Drawing.Rectangle(sourceX, sourceY, sourceWidth, sourceHeight); //Console.WriteLine("From: " + from.ToString()); //Console.WriteLine("To: " + to.ToString()); grPhoto.DrawImage(image, to, from, System.Drawing.GraphicsUnit.Pixel); return bmPhoto; } }