将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
如果你想控制插值模式看到这个职位 。