将System.Drawing.Bitmap缩放到给定大小,同时保持宽高比

我想缩放一个System.Drawing.Bitmap至lessless于一些固定的宽度和高度。 这是为了在网站上为图片库生成缩略图,所以我想保持宽高比相同。

我有一些解决scheme,但似乎没有真正做我所需要的; 他们围绕缩放的基础上保持宽度或高度相同,但不改变两者。

一个例子:

如果我有一个4272×2848的图像,并且我想通过768将它缩放到1024的大小,那么所得的图像应该是1024×683,并填充(用黑色边框)到1024×768。

我怎样才能做到这一点图像大于所需的大小和小于要求的大小,也填充图像不出来的确切大小,我需要一次缩放?

目标参数:

 float width = 1024; float height = 768; var brush = new SolidBrush(Color.Black); 

您的原始文件:

 var image = new Bitmap(file); 

目标大小(比例因子):

 float scale = Math.Min(width / image.Width, height / image.Height); 

resize,包括刷牙canvas:

 var bmp = new Bitmap((int)width, (int)height); var graph = Graphics.FromImage(bmp); // uncomment for higher quality output //graph.InterpolationMode = InterpolationMode.High; //graph.CompositingQuality = CompositingQuality.HighQuality; //graph.SmoothingMode = SmoothingMode.AntiAlias; var scaleWidth = (int)(image.Width * scale); var scaleHeight = (int)(image.Height * scale); graph.FillRectangle(brush, new RectangleF(0, 0, width, height)); graph.DrawImage(image, new Rectangle(((int)width - scaleWidth)/2, ((int)height - scaleHeight)/2, scaleWidth, scaleHeight)); 

不要忘了做一个bmp.Save(filename)来保存结果文件。

位图构造函数具有内置的大小调整。

 Bitmap original = (Bitmap)Image.FromFile("DSC_0002.jpg"); Bitmap resized = new Bitmap(original,new Size(original.Width/4,original.Height/4)); resized.Save("DSC_0002_thumb.jpg"); 

http://msdn.microsoft.com/en-us/library/0wh0045z.aspx

如果你想控制插值模式看到这个职位 。