.NET GUI+ 为图片生成圆角

25 篇文章 0 订阅
12 篇文章 0 订阅
图片的处理搞过好多,最近遇到一个图片圆角处理问题,初步想有两种实现方式:
1、把方形图片的四角用一定的算法裁剪掉;
2、先绘制一个圆角矩形,再把图片填充进来。
 
今天想了一会,第一个方法没实现,用第二种比较简单,大概思路如下:
1、先创建一个与图片大小相同的画布;
2、计算圆角矩形路径,实际上就是计算圆角矩形“每条边”的路径;
3、用原始图片填充圆角矩形。
 
 /// <summary>
        /// 圆角修复。
        /// </summary>
        /// <param name="radius">圆角半径。</param>
        /// <returns>true 表示修复成功,false 修改失败。</returns>
        public bool Fillet(int radius)
        {
            if (radius <= 0 || radius > this.size.Width / 2 || radius > this.size.Height / 2)
                return false;

            //创建一张空白的画布
            Bitmap map = new Bitmap(this.size.Width, this.size.Height, PixelFormat.Format32bppArgb);

            //创建Graphics实例
            Graphics graphics = Graphics.FromImage(map);
            graphics.InterpolationMode = InterpolationMode.High;
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.FillRectangle(Brushes.Transparent, 0, 0, this.size.Width, this.size.Height);

            //定义直径
            int diameter = radius * 2;
            GraphicsPath path = new GraphicsPath();
            path.AddLine(new Point(radius, 0), new Point(this.size.Width - radius, 0));//这里的this.size,是当前画布大小,也是原始的图片大小。
            path.AddArc(new Rectangle(this.size.Width - diameter, 0, diameter, diameter), 270, 90);
            path.AddLine(new Point(this.size.Width, radius), new Point(this.size.Width, this.size.Height - radius));
            path.AddArc(new Rectangle(this.size.Width - diameter, this.size.Height - diameter, diameter, diameter), 0, 90);
            path.AddLine(new Point(this.size.Width - radius, this.size.Height), new Point(radius, this.size.Height));
            path.AddArc(new Rectangle(0, this.size.Height - diameter, diameter, diameter), 90, 90);
            path.AddLine(new Point(0, this.size.Height - radius), new Point(0, radius));
            path.AddArc(new Rectangle(0, 0, diameter, diameter), 180, 90);

            TextureBrush brush = new TextureBrush(this.bitmap);//这里的this.bitmap,是原始图片
            graphics.FillPath(brush, path);

            //保存处理后的图像
            this.bitmap = map;
            graphics.Dispose();
            return true;
        }

效果如下(四角透明):
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值