首页 > 代码库 > .net图片裁剪抠图之性能优化
.net图片裁剪抠图之性能优化
//.net图片裁剪抠图:
1.将不坐标点存入GraphicsPath中;
GraphicsPath gPath = new GraphicsPath();
2.
通常我们判断一个坐标点是否在闭合区间内通采用GraphicsPath.IsVisible(),但事实证明这种方法判断效率及其低,这里我们采用Region.IsVisible(),
经测试,GraphicsPath.IsVisible()处理一张800*800的图片需要14s以上时间。Region.IsVisible()只需要1s.
// /// <summary> /// 图片截图 /// </summary> /// <param name="bitmap">原图路径</param> /// <param name="path">裁剪路径</param> /// <returns></returns> public static Bitmap BitmapCropGzf(Bitmap bitmap, GraphicsPath path) { RectangleF rect = path.GetBounds(); int left = (int)rect.Left; int top = (int)rect.Top; int width = (int)rect.Width; int height = (int)rect.Height; //先进行剪裁: Bitmap imgCropped = new Bitmap(width, height); Graphics objGraphics = Graphics.FromImage(imgCropped); objGraphics.Clear(System.Drawing.Color.White); int intStartTop = -top; int intStartLeft = -left; Bitmap b = new Bitmap(bitmap); objGraphics.DrawImage(b, intStartLeft, intStartTop); b.Dispose(); objGraphics.Dispose(); Region r = new Region(path); GC.Collect(0); for (int i = left; i < left + width; i++) { for (int j = top; j < top + height; j++) { //判断坐标是否在路径中 if (!r.IsVisible(i, j)) { imgCropped.SetPixel(i - left, j - top, System.Drawing.Color.Transparent); } } } return imgCropped; }
.net图片裁剪抠图之性能优化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。