美文网首页xamarin开发技术
Xamarin.iOS 圆形图片裁剪

Xamarin.iOS 圆形图片裁剪

作者: Funky_Xamarin | 来源:发表于2017-05-04 22:56 被阅读149次

本文主要讲解在实际开发过程中圆形图片的实现过程


在项目开发中我们经常会使用圆形头像图片,例如登陆页面的头像,个人页面的头像,某些列表页面的图片等等......都需要采用圆形图片去实现这些功能,所以我们今天主要看看几种实现圆形图片的方法。

圆形图片实现可以采用三种方式:

  • 直接设置UIImageView的Layer,修改图层实现
  • 根据贝塞尔曲线裁剪得到
  • 直接通过绘图技术实现
修改UIImageView的图层

设置UIImageView图层的圆角属性,将其设置为UIImageView宽度的一半,然后将多余的部分给截取掉就能出现圆形的UIImageView。

UIImageView image = new UIImageView();
image.Frame = new CoreGraphics.CGRect(100, 200, 100, 100);
//图片名称
image.Image = UIImage.FromFile("Default");
image.Layer.CornerRadius = image.Frame.Size.Width / 2;
image.Layer.MasksToBounds = true;
this.View.AddSubview(image);

这种方式不建议使用,因为使用图层过量,特别是弄圆角或者阴影会很卡,设置图片圆角一般采用绘图来做。而且过于频繁的对于图层的绘制会造成内存的暴涨,违背我们的原则。

根据贝塞尔曲线裁剪得到

将所需要设置的UIImageView作为参数传入方法中,根据UIImageView的size去建立上下文,然后根据贝塞尔曲线画一个圆然后裁剪,将图片画到裁剪的区域中,此时获取上下文,即可获取一个圆形的图片。

        protected UIImage cutCircleImage(UIImageView imageView)
        {
            UIImage image = UIImage.FromFile("Default");

            UIGraphics.BeginImageContextWithOptions(imageView.Bounds.Size,false,0);

            UIBezierPath.FromRoundedRect(imageView.Bounds,50).AddClip();

            image.Draw(imageView.Bounds);

            UIImage newImage = UIGraphics.GetImageFromCurrentImageContext();

            UIGraphics.EndImageContext();

            return newImage;
                        
        }

然后在主函数中进行引用
imageView.Image = cutCircleImage(imageView);
这样屏幕中就显示了圆形图片区域了

直接通过绘图技术来实现

在iOS中绘图一般分为以下几个步骤:
1.获取绘图上下文
2.创建并设置路径
3.将路径添加到上下文
4.设置上下文状态
5.绘制路径
6.释放路径

程序会调用draw方法,在里面获取了图形上下文(在内存中拥有了),然后利用图形上下文保存绘图信息,利用图形上下文保存绘图信息,可以理解为图形上下文中有一块区域用来保存绘图信息,有一块区域用来保存绘图的状态(线宽,圆角,颜色)。直线不是直接绘制到view上的,可以理解为在图形上下文中有一块单独的区域用来先绘制图形,当调用渲染方法的时候,再把绘制好的图形显示到view上去。

        protected UIImage circleImage(UIImage image)
        {
            // 开启上下文
            UIGraphics.BeginImageContext(image.Size);

            //UIGraphics.BeginImageContextWithOptions(image.Size, false, 0);
            // 获取上下文
            CGContext ctx = UIGraphics.GetCurrentContext();
            // 设置圆形
            CGRect rect = new CGRect(0, 0, image.Size.Width, image.Size.Height);
            //在上文中画一个圆形
            ctx.AddEllipseInRect(rect);
            //裁剪
            ctx.Clip();
            //将图片画到上下文的指定位置上
            image.Draw(rect);
            //从上下文中获取到图片
            UIImage newImage = UIGraphics.GetImageFromCurrentImageContext();
            //结束上下文
            UIGraphics.EndImageContext();

            return newImage;

        }

一般情况下我们一般使用第二种和第三方种方法比较多,我们在很多对于图形的处理上,圆图,圆环,文字彩印等多需要结合上下文进行操作,iOS系统本身提供了两套绘图的框架,即UIBezierPath(第二种) 和 Core Graphics(第三种)。而前者所属UIKit,其实是对Core Graphics框架关于path的进一步封装,所以使用起来比较简单。但是毕竟Core Graphics更接近底层,所以它更加强大。

到这里Xamarin.iOS中圆形图片裁剪的介绍就完成了,希望能对您有所帮助。

——End 有问题可以加我微信,大家一起讨论

相关文章

  • Xamarin.iOS 圆形图片裁剪

    本文主要讲解在实际开发过程中圆形图片的实现过程 在项目开发中我们经常会使用圆形头像图片,例如登陆页面的头像,个人页...

  • 圆形图片裁剪

    一直觉得简书是个充满文学氛围浓厚的平台,后来一些同事和圈友经常问一些技术方面的问题,说我要是把我那本经常用来记录开...

  • 用颜色直接生成image

    附送裁剪圆形图片的方法

  • Quartz2D 绘图

    绘制文字 绘制图片 裁剪圆形图片

  • 通过CALayer和图片裁剪设置圆角

    图片裁剪设置圆角: 1、通过设置和图片同样大小的上下文2、设置圆形裁剪区域(创建圆形路径、把路径设置为裁剪区域ad...

  • 趁早·PPT模拟人生100天 Day 7:工具篇-形状之圆

    本课要点:形状工具中的圆形。 圆形的基础应用: 1-裁剪图片为圆形~拖进一张图片,双击-格式-裁剪下面的箭头-选择...

  • Quartz2D之图片裁切

    图片裁剪 在开发中有的时候是需要裁剪图片的,比如说头像,裁剪成圆形,有的时候还有边框

  • 裁剪圆环图片

    裁剪圆环图片 app的头像很多都是圆形的,所以需要把一张普通的图片刻意裁剪成圆形// 核心代码void CGCon...

  • 图片水印.擦除 图片截屏.........

    画板 图片裁剪 图片擦除 方形图片生产圆形头像 手机截屏 图片水印

  • iOS: 裁剪圆形图片

    1.通过对设置imageView中layer的圆角半径实现圆形图片 2.通过上下文对图片进行裁剪实现圆形图片

网友评论

    本文标题:Xamarin.iOS 圆形图片裁剪

    本文链接:https://www.haomeiwen.com/subject/obyyzttx.html