首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective- C:在UIImage上绘制边框

在Objective-C中,为UIImage添加边框可以通过创建一个新的UIImage并在其上绘制原始图像和边框来实现。以下是一个简单的示例,展示了如何在UIImage周围绘制一个固定宽度的边框:

代码语言:txt
复制
// 假设你有一个UIImage对象叫做originalImage
UIImage *originalImage = [UIImage imageNamed:@"your_image_name"];

// 边框宽度
CGFloat borderWidth = 5.0;

// 创建一个新的图形上下文,大小为原始图像加上两倍的边框宽度
UIGraphicsBeginImageContextWithOptions(CGSizeMake(originalImage.size.width + 2 * borderWidth, originalImage.size.height + 2 * borderWidth), NO, 0.0);

// 获取当前图形上下文的上下文
CGContextRef context = UIGraphicsGetCurrentContext();

// 绘制边框
[[UIColor blackColor] setStroke];
CGContextSetLineWidth(context, borderWidth);
CGContextStrokeRect(context, CGRectMake(borderWidth / 2, borderWidth / 2, originalImage.size.width, originalImage.size.height));

// 绘制原始图像
[originalImage drawInRect:CGRectMake(borderWidth, borderWidth, originalImage.size.width, originalImage.size.height)];

// 从当前图形上下文中获取新的带边框的UIImage
UIImage *borderedImage = UIGraphicsGetImageFromCurrentImageContext();

// 结束图形上下文
UIGraphicsEndImageContext();

// 现在你有了一个带边框的UIImage对象borderedImage

基础概念

  • UIImage: iOS中表示图像的对象。
  • UIGraphicsBeginImageContextWithOptions: 开始一个新的图形上下文,用于绘制图像。
  • CGContextRef: Core Graphics框架中的一个类型,代表一个图形上下文。
  • CGContextStrokeRect: 在图形上下文中绘制一个矩形的边框。

优势

  • 可以自定义边框的颜色和宽度。
  • 不会影响原始图像的尺寸,可以在不改变原始图像的情况下添加边框。

类型

  • 固定宽度的边框。
  • 可变宽度的边框,可以根据需要调整。

应用场景

  • 在显示用户头像时添加边框。
  • 在应用中显示带有边框的图标或图片。

可能遇到的问题及解决方法

  • 性能问题: 如果在大量图像上频繁绘制边框,可能会影响性能。解决方法包括缓存带边框的图像或在后台线程中进行绘制。
  • 边框颜色不一致: 确保在绘制边框时使用的颜色是正确的,并且在不同的视图或状态下保持一致。

通过上述代码和方法,你可以在Objective-C中为UIImage对象添加边框。这种方法简单且灵活,可以根据需要调整边框的颜色和宽度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发——制作圆形头像

在今天看到美工给的登陆效果图时,我发现也是要求做一个圆形的头像显示效果,在晚上琢磨之后,我打算把这段经验记录一下,因为以后肯定会用到的次数也很多,为此我也专门Category一个类目以便日后使用。...制作这个圆形头像,我的大体思路就是直接用Core graphic直接绘制,将原本的非圆形图片直接裁剪为圆形,之后再绘制上外面的阴影。...如果对外边框没有要求的同学,可以直接用最简单的方式来设置,我把简单的方法先贴出来: UIImage * image = [UIImage imageNamed:@"icon_huo"]; UIImageView...0.32]]; //头像图片 UIImage *image = [UIImage imageNamed:icon]; //设置头像白色边框 像素6px CGSize...CGRectMake(0, 0, size.width, size.height)); //剪切可视范围 CGContextClip(context); //绘制边框图片

1.2K20
  • iOS开发CoreGraphics核心图形框架之二——深入理解图形上下文

    Path路径绘制到当前视图上,上一篇博客只是抛砖引玉,本片博客将更深入的介绍下有关上下文的更多内容。...4.图层上下文:用于将内容绘制在Layer图层上。 5.打印上下文:使用Mac打印功能时,此上下文用于将内容绘制在打印输出源上。...kCGPathStroke, //边框绘制 kCGPathFillStroke, //边框绘制并填充 kCGPathEOFillStroke //补集进行边框和填充绘制 */ void..., CGRect rect); //进行矩形区域的边框绘制 可以设置边框宽度 void CGContextStrokeRectWithWidth(CGContextRef cg_nullable c,...(CGContextRef cg_nullable c, bool allowsFontSubpixelPositioning); //这个方法会在当前Context中开启一个透明的层 之后的绘制会绘制到这个透明的层上

    2.7K20

    图层树和寄宿图 -- iOS Core Animation 系列一

    CALayer类在概念上和UIView类似,也是一些被层级关系树管理的矩形块,也可以包含一些内容,并且管理子视图的位置。...但是在 iOS上,如果将 UIImage 的值赋给它,只能得到一个空白的图层。 事实上,真正赋值的类型应该是CGImageRef,这是一个指向CGImage结构的指针。...它定义了一个苦丁的边框和在图层上可拉伸的区域。 默认情况下,contentsCenter是{0, 0, 1, 1},意味着如果大小改变(contentsGravity),寄宿图会被均匀的拉伸。...这效果看起来和UIImage里的resizableImageWithCapInsets:非常类似,它可以运用到任何寄宿图,包括在Core Graphics运行时绘制的图形。 ?...在blueLayer上显式调用了-display。因为当图层显示在屏幕上时,CALayer不会自动重绘,这和UIView不同。需要手动调用。 我们没有调用masksToBounds。

    1.2K20

    C与C++在const用法上的区别

    首先,C和C++在大体结构上不同,却在语法上相同。  所以在使用的时候,我们会时常遇到一些莫名其妙的问题,觉得语法上是正确的,但是编译的时候却出现一个红色的 error!...&var; 9 *p = 1; 10 printf("%d\n",var); 11 getchar(); 12 }  答案很定不用说:    1      原因也很简单:  C弱类型语言...,C++是强类型语言。  ...原因是C++是强类型语言,C++的数据的类型更加严格与苛刻 !      ...当然对于C++为何会出现指针的值为*p=3而var=10这样的情况,其实,*P所指的常量地址真实的内存已经修改了,但是编译器并没有从内存地址中取值,而是直接从寄存器中取的值,所以var=10依旧表面上依旧没有发生什么改变

    73140

    CALayer 图层概念二、CALayer属性二、方法

    UIView负责监听和相应事件.UIView是更高层的封装 在 iOS 中,你能看得见,摸得着的东西基本上都是UIView.比如一个按钮,一个文本标签,一个文本输入框, 一个图标等.这些都是UIView...,其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时, UIView内部会自动创建一个图层 (即CALayer对象), 通过UIView的layer属性即可访问这个图层....当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView得显示.换句话说,UIView...UIColor, UIImage是定义在UIKit框架中的....其次 : QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用 (C语言编写) 但是UIKit只能在iOS中使用 (OC编写).

    1.4K70

    swift手撕二维码一、简介二、二维码综合案例

    此前被广泛使用的zbarsdk目前不支持64位处理器,而在15年的2月起,苹果是不允许不支持64位处理器的APP上架的。...改变二维码的颜色或者添加背景图片不会对二维码扫描造成影响,可是若在二维码上添加了前景则必定会遮挡住二维码的某些部分,那么我们又怎么确保能正确的扫描到二维码指定的地址去呢?...func getNewImage(sourceImage:UIImage,center:UIImage) -> UIImage { } 在方法中首先要通过传入的二维码图片开启图像的上下文 let size...= sourceImage.size //开启图形上下文 UIGraphicsBeginImageContext(size) 之后绘制大小图片,大图片即为二维码,设置大小边框为0,0,宽度,高度...layer.frame = view.layer.bounds view.layer.addSublayer(layer) 插入边框 // 这样是没有二维码的边框的,所以插入边框

    1.8K70

    在Linux上用Eclipse写C++程序

    我厂很多同学使用VC在windows上编写linux的C/C++程序,然后再传的开发服务器上,然后再编译和调试。如果有修改,可能会直接用vi去改了,然后再把源代码同步回来。其实这样做挺折腾的。...但是,也有另外一个方案,就是在 Linux上安装个写C/C++程序的IDE,这样可以直接编写、编译、运行、上传SVN,非常方便。...注意Eclipse有很多个包,如果只写C/C++程序,就直接下Eclipse CDT这个套件好了,省了还要下支持JAVA开发的东西。 ?...如果你使用gtest来做单元测试,可以装个“C/C++ Unit Testing Support“,这样就可以直接在IDE里面运行和调试单元测试了。...按Ctrl+Tab可以在.h和.cpp之间切换。保存的时候自动编译。

    3.4K70

    实战|C++在vscode上的调试配置

    ⽬标 按照本⽂的流程可在vscode平台上实现像在windows系统下VS调试C++程序的效果。...本⽂旨在让刚接触vscode却⼜不知如何 debug的童鞋能够快速搭建⾃⼰的编程环境,使更多的精⼒focus在coding或algrithm上,若有错误的地⽅,欢迎指正和交流。...直接点击左侧第五个按钮,在⾥⾯搜索⼀些⽀持C++的插件,⽐如下图中的C/C++,C++ Intellisense,直接搜索插件名字后点下载就会⾃动安装,安装完了就会在下图的ENABLED列表⾥了。...接下去只要再弄2个⽂件,就可以debug你的项⽬了,第⼀个是tasks.json⽂件,可以在⽹上搜索如何⽣成,不过更直接的⽅ 式是直接在.vscode下新建⼀个tasks.json⽂件,然后把以下内容直接复制上去...总结 在vscode下配置C++调试环境主要就是做⼀件事:创(复)建(制)1个⽂件夹和3个⽂件: launch.json tasks.json 编译执⾏的脚本:例⼦中的脚本内容实际就是cmake内容

    4.2K20

    C#入门知识大总结(在C语言的基础上)

    前言 本文为C#入门知识,是在有一定C语言或C++基础上进行的总结,因此会省略许多C语言的基础知识,但是对一些C#特有或者是C语言中比较少见或重要的知识也会归纳到博文里。...=的比较 由于char是特殊的整型,因此它既可以和自己同类型比较 还可以和数值类型进行比较 还可以和字符类型进行大小比较 char c = 'a'; result = c > 123; result =...c > 'B'; 十、逻辑运算符 逻辑与:&&    逻辑或:||      逻辑非:!...符号和规则与C语言中相同 1.注意 逻辑运算符当中逻辑非(!)...十三、 if语句 原理等同C语言 十四、switch语句 原理等同C语言 十五、while语句 原理等同C语言 十六、do while语句 原理等同C语言 十七、for循环 原理等同C语言

    28320

    iOS学习——核心动画之Layer基础

    //设置图层边框,在图层中使用CoreGraphics的CGColorRef _RedView.layer.borderColor = [UIColor whiteColor].CGColor;...UIImageView中是UIView的主layer上添加了一个次layer(用来绘制contents),我们设置边框的是主layer,但是次layer在上变,不会有任何的影响,所以当我们调用切割语句的时候...之所以能够显示在屏幕上,是试音UIView中有一个图层 在创建UIView的时候,系统会自动创建一个CALayer在其中,用于显示东西,可以通过view.layer来去获取图层属性 当UIView要去显示的时候...,先去调用drawRect方法,将要绘制的东西绘制到图层上,然后拷贝图层,完成了UIView的显示 UIView只有交互的功能,没有显示的功能 CALayer只要显示的功能,没有交互的功能 UIView...CATransform3DMakeRotation(angle2Rad(hourA), 0, 0, 1); } 10.3 将布局和旋转进行组合 每过一秒,我们的秒针就需要变化位置,所以我们我们需要设置一个定时器,在开始时每秒执行一次旋转布局绘制

    1.5K61

    iOS动画-CALayer基础知识

    它实际上是一个复合引擎,可以将存储在图层树体系中的不同独立图层,尽可能快地组合成不同的可视内容呈现于屏幕上;所以做动画只是Core Animation的特性之一; Core Animation直接作用于...CALayer上,而图层树又是形成了UIKit以及我们在iOS应用程序所能在屏幕上看见一切的基础。...时,其内部会自动创建CALayer图层对象(即UIView的关联图层),UIView调用drawRect:方法进行绘图,并且将所有的内容绘制到自己的图层上,绘制完毕后,系统会将图层拷贝到屏幕上,于是就完成了...在Mac OS系统上,contents属性对于CGIamge和NSImage类型的值都起作用;而对于iOS平台,虽然UIImage的CGImage属性也返回一个CGImageRef,但如果将这个值直接赋值给...) 允许在图层边框里显示寄宿图的一个子域 contentCenter (CGRect) 定义一个固定的边框和一个在图层上可拉伸的区域 三、UIView方法绘制自定义寄宿图 给contents赋值CGImage

    1.9K50
    领券