现在的位置: 首页 > 综合 > 正文

图片裁剪

2012年09月04日 ⁄ 综合 ⁄ 共 1994字 ⁄ 字号 评论关闭
  刚好需要做图片裁剪,就在网上找了几个方法,都拿来试试,分析一下。
  方法一(原帖地址:他的做法是将一个已知文件名的图片裁剪后保存为另一个文件,我根据自己的需要改成了输入和输出都是Image对象的方式):
ImageCut

  方法二(原帖地址:同方法一,做了一些修改):

ImageCut

  两种方法的比较:
  两种方法生成的图片是一样的,区别在于所用的时间;为此我做了几个测试:当取一张分辨率为2592X1944、大小为2.09M的图片作为原始图片时,方法一用时436.5毫秒,方法二为333.2毫秒;而当图片大到分辨率为6404X4724、大小为25.1M的时候,方法一用时3485.0毫秒,方法二用时2758.8毫秒,两者相差超过半秒钟;可以预见,图片越大,方法二的速度优势越明显;因此,如果从节省时间资源的角度考虑,应该选用方法二。
  更正:
  由于编写代码上的疏忽,导致原先对切割图片的时间计算是错误的;同时对于方法一再次做了修改,代码如下:

ImageCut

  由于此方法的切割采用了Bitmap对象的Clone()方法,因此我将传入的参数做了相应的修改,并将其切割精度扩大到小数级别;排除所有干扰后重新对两个方法进行耗时测试,结果为:当取一张分辨率为2592X1944、大小为2.09M的图片作为原始图片时,方法一用时5.1毫秒左右,方法二为46毫秒左右;而当图片大到分辨率为6404X4724、大小为25.1M的时候,方法一仅用时5.8毫秒左右,方法二用时240毫秒左右;可见,方法一的速度优势是极其明显的;究其原因,方法一采用了Bitmap对象的Clone,而方法二将大量的时间耗在了DrawImage上;因此,方法一在切割图片的时间资源占用上是非常非常小的,或许已经达到了GDI+所能做到的极限;当然,或许还不是;所以我会继续研究下去的,也不能再犯之前不够细致的错误了,嘿嘿~

抱歉!评论已关闭.