在使用图片的过程中,我们有时候需要将图片缩放到特定的宽度和高度,但是又不希望图片被直接拉伸而变形,而是实现图片的等比例缩放。类似于Winform的PictureBox的SizeMode属性的Zoom,而不是StretchImage。
-
//等比例缩放图片
-
private Bitmap ZoomImage(Bitmap bitmap, int destHeight, int destWidth)
-
{
-
try
-
{
-
System.Drawing.Image sourImage = bitmap;
-
int width = 0, height = 0;
-
//按比例缩放
-
int sourWidth = sourImage.Width;
-
int sourHeight = sourImage.Height;
-
if (sourHeight > destHeight || sourWidth > destWidth)
-
{
-
if ((sourWidth * destHeight) > (sourHeight * destWidth))
-
{
-
width = destWidth;
-
height = (destWidth * sourHeight) / sourWidth;
-
}
-
else
-
{
-
height = destHeight;
-
width = (sourWidth * destHeight) / sourHeight;
-
}
-
}
-
else
-
{
-
width = sourWidth;
-
height = sourHeight;
-
}
-
Bitmap destBitmap = new Bitmap(destWidth, destHeight);
-
Graphics g = Graphics.FromImage(destBitmap);
-
g.Clear(Color.Transparent);
-
//设置画布的描绘质量
-
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
-
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
-
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
-
g.DrawImage(sourImage, new Rectangle((destWidth - width) / 2, (destHeight - height) / 2, width, height), 0, 0, sourImage.Width, sourImage.Height, GraphicsUnit.Pixel);
-
g.Dispose();
-
//设置压缩质量
-
System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();
-
long[] quality = new long[1];
-
quality[0] = 100;
-
System.Drawing.Imaging.EncoderParameter encoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
-
encoderParams.Param[0] = encoderParam;
-
sourImage.Dispose();
-
return destBitmap;
-
}
-
catch
-
{
-
return bitmap;
-
}
-
}