C#裁剪图像的几种方法总结
创始人
2024-11-11 05:41:11
0

前言

我们在上位机软件开发过程中经常需要裁剪图像,本文就是对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、gid绘图(低质量)

使用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,0                 result = true;             }             catch (Exception ex)             {              }             return screenShot;         } 

3、gid绘图(高质量)

使用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,0             result = 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高质量绘图方法。

相关内容

热门资讯

曝光一下!决战卡五星辅助,威信... 曝光一下!决战卡五星辅助,威信茶馆app插件,原来有挂(哔哩哔哩)1、威信茶馆app插件免费辅助多个...
分享一下!微信微乐小程序修改器... 分享一下!微信微乐小程序修改器,永胜联盟会封号吗,真是真的有挂(哔哩哔哩)1、许多玩家不知道微信微乐...
辅助一下!微乐小程序辅助脚本,... 辅助一下!微乐小程序辅助脚本,闲逸免费app辅助,切实真的是有挂(哔哩哔哩);该软件可以轻松地帮助玩...
教你一下!芒果辅助器安卓版,海... 教你一下!芒果辅助器安卓版,海盗来了辅助脚本,原来有挂(哔哩哔哩)1、玩家可以在芒果辅助器安卓版线上...
解谜一下!拱趴大菠萝运势,天天... 解谜一下!拱趴大菠萝运势,天天微友有辅助吗,本来真的是有挂(哔哩哔哩)天天微友有辅助吗透视方法中分为...
解谜一下!边锋干瞪眼ios辅助... 解谜一下!边锋干瞪眼ios辅助,皇豪互众控制系统,其实是有挂(哔哩哔哩)1、该软件可以轻松地帮助玩家...
曝光一下!欢乐茶馆挂,大菠萝辅... 曝光一下!欢乐茶馆挂,大菠萝辅助器,好像是有挂(哔哩哔哩)1、大菠萝辅助器公共底牌简单,大菠萝辅助器...
必备一下!四川游戏家园破解版,... 必备一下!四川游戏家园破解版,微乐家乡麻辣自建房辅助app,原来有挂(哔哩哔哩)1、完成微乐家乡麻辣...
总结一下!可乐辅助,威信茶馆解... 总结一下!可乐辅助,威信茶馆解码器,一贯真的是有挂(哔哩哔哩)该软件可以轻松地帮助玩家将威信茶馆解码...
详细一下!透视辅助工具,兴动休... 详细一下!透视辅助工具,兴动休闲辅助,一贯是真的有挂(哔哩哔哩)1、完成透视辅助工具辅助器v3.3的...