等比例缩放图片(C#)
在使用图片的过程中,我们有时候需要将图片缩放到特定的宽度和高度,但是又不希望图片被直接拉伸而变形,而是实现图片的等比例缩放。类似于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;
 - 
}
 - 
}
 
    C#
                    
                
                
            
        
浙公网安备 33010602011771号