当前位置: 首页 > news >正文

C#裁剪图像的几种方法总结

前言

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 关于使用Next遇到的一些新特性
  • 【C++】STL | vector 详解及重要函数的实现
  • 工作随记:我在OL8.8部署oracle rac遇到的问题
  • bpmn简单使用(制作流程图)
  • Mysql开启SSL
  • 鸿蒙Harmony开发:onFrame逐帧回调规范
  • 接了一个2000块的小活,大家进来看看值不值,附源码
  • MATLAB 与Gazebo联合仿真
  • 2024年必备技能:智联招聘岗位信息采集技巧全解析
  • KBEngine ue5
  • 事务和索引(面试常问)
  • 【数据结构】哈希应用-STL-位图
  • 实践致知第17享:电脑忽然黑屏的常见原因及处理方法
  • linux perf
  • C# Unity 面向对象补全计划 七大原则 之 里氏替换(LSP) 难度:☆☆☆ 总结:子类可以当父类用,牛马是马,骡马也是马
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • CentOS7简单部署NFS
  • ES6 ...操作符
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Fastjson的基本使用方法大全
  • Joomla 2.x, 3.x useful code cheatsheet
  • Node项目之评分系统(二)- 数据库设计
  • React16时代,该用什么姿势写 React ?
  • scrapy学习之路4(itemloder的使用)
  • TypeScript迭代器
  • 简单基于spring的redis配置(单机和集群模式)
  • 聊一聊前端的监控
  • 判断客户端类型,Android,iOS,PC
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 算法---两个栈实现一个队列
  • 通过npm或yarn自动生成vue组件
  • 用element的upload组件实现多图片上传和压缩
  • 责任链模式的两种实现
  • 自动记录MySQL慢查询快照脚本
  • 积累各种好的链接
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​低代码平台的核心价值与优势
  • ###项目技术发展史
  • $forceUpdate()函数
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Java)【深基9.例1】选举学生会
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (windows2012共享文件夹和防火墙设置
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (十三)Maven插件解析运行机制
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)JPA - JQPL 实现增删改查
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一)u-boot-nand.bin的下载
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)可以带来幸福的一本书
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版