设计师查询网站,lnmp 内网 wordpress,致力于做服务更好的网站建设公司,手机服务器前言 
我们在上位机软件开发过程中经常需要裁剪图像#xff0c;本文就是对c#中常见的裁剪图像方法进行总结。 
1、克隆 
直接调用Bitmap的Clone函数#xff0c;然后指定需要裁剪的区域即可裁剪图像#xff0c;该种方法不会损失精度 public static Bitmap CropImage_Clone(Bi…前言 
我们在上位机软件开发过程中经常需要裁剪图像本文就是对c#中常见的裁剪图像方法进行总结。 
1、克隆 
直接调用Bitmap的Clone函数然后指定需要裁剪的区域即可裁剪图像该种方法不会损失精度 public static Bitmap CropImage_Clone(Bitmap origBitmap, Rectangle rectangle, out bool result){result  false;Bitmap croppedBitmap  null;try{croppedBitmap  origBitmap.Clone(rectangle, origBitmap.PixelFormat);result  true;}catch (Exception ex){}return croppedBitmap;}2、gdi绘图低质量 
使用gdi绘图的方式优点是除了将原始图像根据指定区域裁剪外而且可以在新的图像上绘制直线、矩形等图形但是可能会丢失精度。 public static Bitmap CropImage_Gdi_LowerQuality(Bitmap origBitmap, Rectangle rectangle, out bool result){result  false;Bitmap screenShot  new Bitmap(rectangle.Width, rectangle.Height);screenShot.SetResolution(origBitmap.HorizontalResolution, origBitmap.VerticalResolution);try{Graphics graphics  Graphics.FromImage(screenShot);graphics.DrawImage(origBitmap, 0, 0, rectangle, GraphicsUnit.Pixel);//这里的0,0指的是rectangle矩形图像在新图像中的左上角坐标如果是截图片则就使用0,0result  true;}catch (Exception ex){}return screenShot;}3、gdi绘图高质量 
使用gdi绘图的方式有时候会发现绘制的线条出现了锯齿等这时候可以通过设置SmoothingMode 属性这里设置为HighQuality来抵抗锯齿的出现缺点是计算时间会变长相当于提高了精度损失了效率。 public static Bitmap CropImage_Gdi_HighQuality(Bitmap origBitmap, Rectangle rectangle, out bool result){result  false;Bitmap screenShot  new Bitmap(rectangle.Width, rectangle.Height);screenShot.SetResolution(origBitmap.HorizontalResolution, origBitmap.VerticalResolution);try{Graphics graphics  Graphics.FromImage(screenShot);graphics.SmoothingMode  SmoothingMode.HighQuality;graphics.DrawImage(origBitmap, 0, 0, rectangle, GraphicsUnit.Pixel);//这里的0,0指的是rectangle矩形图像在新图像中的左上角坐标如果是截图片则就使用0,0result  true;}catch (Exception ex){}return screenShot;}调用 
下面的代码中原始图像如下  裁剪后的图像如下  
也就是裁剪出一半大小的图像。并且也可以根据打印出来的信息看到三种方法的执行时间都不相同使用克隆是速度最快的方法。  
Bitmap bitmap  new Bitmap(test.jpg);Rectangle cropArea  new Rectangle(0, 0, bitmap.Width / 2, bitmap.Height); // 示例裁剪区域Stopwatch stopwatch  new Stopwatch();stopwatch.Restart();bool result  false;Bitmap cropImage_Clone  CropImage_Clone(bitmap, cropArea, out result);Console.WriteLine(stopwatch.ElapsedMilliseconds);cropImage_Clone.Save(cropImage_Clone.bmp,ImageFormat.Jpeg    );stopwatch.Restart();Bitmap cropImage_Gdi_LowerQuality  CropImage_Gdi_LowerQuality(bitmap, cropArea, out result);Console.WriteLine(stopwatch.ElapsedMilliseconds);cropImage_Gdi_LowerQuality.Save(cropImage_Gdi_LowerQuality.bmp, ImageFormat.Jpeg  );Bitmap cropImage_Gdi_HighQuality  CropImage_Gdi_HighQuality(bitmap, cropArea, out result);Console.WriteLine(stopwatch.ElapsedMilliseconds);cropImage_Gdi_HighQuality.Save(cropImage_Gdi_HighQuality.bmp, ImageFormat.Jpeg);总结 
1、对于不需要额外绘制图形的场景直接使用克隆方法 2、对于需要绘制图形的场景使用gdi高质量绘图方法。