CoreGraphics import CoreGraphics.CGBase // 常用对象 import CoreGraphics.CGFunction import CoreGraphics.CGImage...CoreGraphics.CGFont // 字体 import CoreGraphics.CGPath // 路径 import CoreGraphics.CGError // CGPoint、CGSize、CGRect...CoreGraphics.CGShading // 变换 import CoreGraphics.CGAffineTransform // 绘图、图像I/O相关 import CoreGraphics.CGContext...、抗锯齿、渐变、图像、颜色、PDF文档等 定义了CGPath、CGImage等常用的对象 定义了CGPoint、CGSize、CGRect等常用的数据结构并提供了相关的几何运算函数, 定义了CGLayer...并提供了渐变和变换矩阵的接口 提供了绘图接口(CGContext) 提供了对图像I/O相关操作接口 提供了对PDF操作的接口 所以CoreGraphics是系统绘制界面、图像、动画的基础框架 2.QuartzCore
1 图片处理 1.1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate...tid=110115 2 绘制文本 2.1 NSMutableAttributedString绘制 CGRect textViewRect = CGRectMake(ICON_SPACE, _imageHeight...3.1 异步绘制示例 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ CGRect...CGContextRelease(bitmapContext); // CGImageRelease(imgref); // // return newImage; } 5.1.3 绘制时单元格底部出现高度不定的细微黑线...问题原因: 将Text做宽高计算时,高度值容易得出小数数值,而页面绘制均是基于整数像素点绘制,对于小数点部分,系统会做舍去处理(即便有缩放),固留下高度不定的未绘制区域(为黑色)。
异步绘制专题 1 图片处理 1.1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate...tid=110115 2 绘制文本 2.1 NSMutableAttributedString绘制 CGRect textViewRect = CGRectMake(ICON_SPACE...3.1 异步绘制示例 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ CGRect...(dataRef); returndecompressedImage; } 5.1.2 绘制时底部出现高度不定的细微黑线 问题原因: 将Text做宽高计算时,高度值容易得出小数数值...,而页面绘制均是基于整数像素点绘制,对于小数点部分,系统会做舍去处理(即便有缩放),固留下高度不定的未绘制区域(为黑色)。
前言 app在渲染视图时,需要在坐标系中指定绘制区域。 这个概念看似乎简单,事实并非如此。...先介绍一个图形上下文(graphics context)的概念,比如说我们常用的CGContext就是Quartz 2D的上下文。图形上下文包含绘制所需的信息,比如颜色、线宽、字体等。...当用CoreText渲染时,坐标是(0,0),但是渲染的结果是在左上角,并不是在左下角;并且文字是上下颠倒的。...default matrix [2, 0, -0, 2, 0, 0]; 最终结果如下,文本从左下角开始渲染,并且没有出现上下颠倒的情况。...3、如何理解CoreGraphics坐标系不一致后,会出现绘制结果异常? 我的理解方法是,我们可以先不考虑坐标系变换的情况。
如果设置了contentsGravity属性为kCAGravityResizeAspect(拉伸)时,将会忽略contentsScale,因为拉伸图片适应图层时,根本不会考虑分辨率问题。...当我们使用UIImage时,会获取高质量的图片,但CGImage没有拉伸概念,因此使用CGImage设置图片时,拉伸的因素会在转换的时候丢失,当用代码设置contents图片时,要手动设置图层的contentsScale...的属性,避免Retina屏幕显示错误 layer.contentsScale = [UIScreen mainScreen].scale; ?...contentsScale maskToBounds 默认情况下,UIView会绘制超过边界的内容或子视图,CALayer也一样。...contentsRect 这个属性是CGRect类型,它允许我们设置图层显示内容图片的一个区域。
进行图像截取的示例代码如下: -(void)drawRect:(CGRect)rect{ CGContextRef contextRef = UIGraphicsGetCurrentContext...膜层可以简单的理解为将一个图层追加到原图层上,但需要注意,图层中颜色为纯黑的部分,会按照原图绘制,纯白的部分会被完全遮挡,这中间的颜色会以特定的算法进行alpha值的更改。...例如将如下图片作为膜层绘制到原图像上: ?...则当满足如下条件时,这个像素点会被裁剪: min1<c1<max1,min2<c2<max2,min3<c3<max3 需要注意,使用这种方式进行膜层裁剪,原图像不可以有alpha通道,色值的取值范围为...,在进行图像混合时,需要先绘制背景图像,之后设置图像混合模式,在绘制前景图像,CoreGraphics会根据混合模式来进行最后图像的绘制。
前言 CGContext又叫图形上下文,相当于一块画布,以堆栈形式存放,只有在当前context上绘图才有效。...Paste_Image.png 让我们来看一下CGContext.h 里面的方法: CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文...#2.kCGLineCapRound该属性值指定绘制圆形端点, 线条结尾处绘制一个直径为线条宽度的半圆 #3.kCGLineCapSquare该属性值指定绘制方形端点。...CGColorGetComponents() 返回颜色的各个直 以及透明度 可用只读const float 来接收 是个数组 画图片 CGImageRef image= CGImageRetain(img.CGImage...苹果官CGPath CGRectGet系列 CGRectInset(CGRect rect, CGFloat dx, CGFloat dy) dx,dy 是在rect的内部左右,上下距离的值。
CALayer的contents,却会得到一个编译错误。...) 允许在图层边框里显示寄宿图的一个子域 contentCenter (CGRect) 定义一个固定的边框和一个在图层上可拉伸的区域 三、UIView方法绘制自定义寄宿图 给contents赋值CGImage...CALayer重绘并保存了因此产生的图片;CALayer有一个可选的delegate属性,实现了CALayerDelegate非正式协议,当CALayer需要一个内容特定信息时,就会从协议中请求;而当需要被绘制时...主动绘制 我们需要显式的调用-display方法;这不同于UIView,当图层显示到屏幕上时,CALayer不会自动重绘它的内容,CALayer把重绘的决定权交给了开发者; 2.绘制特点 尽管没有使用...; 使用总结:当我们需要自定义寄宿图时,其实不必实现displayLayer:和-drawLayer: inContext:方法来绘制寄宿图。
4.图层上下文:用于将内容绘制在Layer图层上。 5.打印上下文:使用Mac打印功能时,此上下文用于将内容绘制在打印输出源上。...(CGRect rect, CGBlendMode blendMode); UIKIT_EXTERN void UIRectFrame(CGRect rect); //这个方法用于裁剪当前的图形上下文的绘制区域...的值 kCGPDFContextSubject //设置文档的关键字 kCGPDFContextKeywords //设置密钥长度 kCGPDFContextEncryptionKeyLength 四、CGContext...CoreGraphics框架中提供的CGContext绘制相关方法解析如下: //获取CGContext类在CoreGraphics框架中的id值 CFTypeID CGContextGetTypeID..., size_t count); //进行矩形区域的边框绘制 void CGContextStrokeRect(CGContextRef cg_nullable c, CGRect rect); //进行矩形区域的边框绘制
每次执行函数时,目的是调整参数来减少Loss。因此每次更改参数时,就会在增加一次Iteration,目标是为了得到更少的Loss。在训练的过程中,你可以发现Loss会渐渐地变少。...// 4 let rgbColorSpace = CGColorSpaceCreateDeviceRGB() let context = CGContext(data:...接着,将所有数据创建为CGContext,当我们需要渲染(或改变)某些底层的属性时,就可以简单地调用它,这是我们在下列两行代码中透过转化及缩放图像所做的事。...我们调用context的内建函数(也就是createCGImage),它从ciImage产生CGImage。最后,我们可以将imageView设置为tempImage。这样就完成了!...如果有任何错误,我们可以将错误印出来好好处理。 构建并执行项目。你可以从图库中选一张图片,然后测试应用程序! ?
平时使用UIImageView时遇到类似情况,可以设置contentMode来解决。...如果有不解之处请看原文 2.1.7 contentsCenter contentsCenter看名字大部分人会误以为是和位置有关,其实它是一个CGRect。...2.2 Custom Drawing 除了给contents赋值CGImage来设置寄宿图之外,还可以直接用Core Graphics来绘制寄宿图。...如果你不需要寄宿图,不要写这个方法,会造成资源浪费,详细部分见《内存恶鬼drawRect》 视图在屏幕上出现的时候-drawRect:会自动被调用。...因为当图层显示在屏幕上时,CALayer不会自动重绘,这和UIView不同。需要手动调用。 我们没有调用masksToBounds。但是绘制的圆仍然被裁剪了。
, colRect.origin.y); return deleteBounds; } -(CGRect)convertRectFromLoc:(CGRect)rect { return...之前的文章老司机讲过,我们在drawRect中绘制文本的时候主要是根据Path去绘制的。...); 至此,我们就绘制出环绕的文本了。...由于图片是在一个空白占位符上绘制文字,所以一定是以一个CTRun进行绘制的。但是第一篇文章中老司机说过,每个CTRun是所有具有相同属性的连续同行文字的集合。...针对CTRun的特性,我们不难想到,文字由于可能出现两行,也有可能会活动文本的字体字号等其他属性不尽相同导致一段文字由两个CTRun进行绘制,所以不能单纯的保存一个frame,而是要以一个数组容纳他。
var imageRequestHandler = VNImageRequestHandler(cgImage: image.cgImage!...在开始请求分析之前,我们还需要定义个方法,用来进行矩形区域绘制: private func drawTask(request: VNDetectRectanglesRequest) { // 将之前绘制的删除...你可以用几张图片来实验下检测效果,如下图: 上面图片中的黑色边框就是我们检测出的结果绘制的。...{ get } } 需要注意,设置最大最小纵横比时,会总是以长的一边作为纵,短的一边作为横。...image: CGImage, options: [VNImageOption : Any] = [:]) public init(cgImage image: CGImage, orientation
但是在实践中,如果 content 的值不是 CGImage ,得到的图层将是空白的。 既然如此,为什么要将 contents 的属性类型定义为 id 而非 CGImage。...这是因为在 Mac OS 系统中,该属性对 CGImage 和 NSImage 类型的值都起作用,而在 iOS 系统中,该属性只对 CGImage 起作用。...display(_ layer: CALayer) @available(iOS 2.0, *) optional func draw(_ layer: CALayer, in ctx: CGContext...系统绘制流程 系统绘制流程 上图本质就是创建一个 backing storage 的流程,归纳一下: 系统绘制时, 会先创建 backing storage(CGContextRef),我们可以理解为...var frame: CGReact: { get { return CGRect( x: center.x - bounds.size.width * layer.anchorPoint.x
其中,CGPDFDocumentRef对应整个PDF文档,里面封装了许多文档相关的信息,CGPDFPageRef对应PDF文档中某一页的内容,通过它开发者可以将PDF内容通过CGContext上下文渲染到指定目标上...如下代码演示了在自定义View的drawRect:方法中进行PDF文档的绘制: -(void)drawRect:(CGRect)rect{ //由于坐标系不同,需要进行翻转 CGContextRef...//判断PDF文档是否已经解锁 bool CGPDFDocumentIsUnlocked(CGPDFDocumentRef cg_nullable document); //获取此PDF文档是否允许绘制...在创建PDF文档时,开发者还可以使用如下列举的方法来对文档进行超链接添加,内容信息设置等: //关闭文档上下文,关闭后将不能再次写入 void CGPDFContextClose(CGContextRef...rect); 在设置文档信息字典时,支持的常用键如下: //设置文档标题 可选设置 const CFStringRef kCGPDFContextTitle; //设置文档的作者 可选设置 const
method_exchangeImplementations(originalMethod, swizzleMethod); }- (instancetype)swizzleInitWithFrame:(CGRect...grayImage];}@end生成灰色图片的代码如下: #import @interface UIImage (Category)// 不建议使用,内存占用大,且在多图列表上滑动时,...CGColorSpaceRelease(colorRef); if (context == nil) { return nil; } //第三步:渲染图片(绘制图片...); //第四步:将绘制颜色空间转成CGImage(转成可识别图片类型) CGImageRef grayImageRef = CGBitmapContextCreateImage(context...(self) { [self setupSubviews]; } return self; } - (instancetype)initWithFrame:(CGRect
8.CATiledLayer CATiledLayer类似瓦片视图,可以将绘制分区域进行,常用于一张大的图片的分不分绘制。...三、设置与调整Layer层的内容 设置层的内容有下面三种方式: 1.可以通过设置CGImage为layer的内容。 2.可以通过代理方法来动态修改或者绘制层的内容。...)convertRect:(CGRect)r fromLayer:(nullable CALayer *)l; - (CGRect)convertRect:(CGRect)r toLayer:(nullable...*)hitTest:(CGPoint)p; //返回layer的bounds内是否包含某一点 - (BOOL)containsPoint:(CGPoint)p; //设置layer的内容,一般会设置为CGImage...:(CGRect)r; //获取是否需要重新绘制 - (BOOL)needsDisplay; //如果需要,进行内容重绘 - (void)displayIfNeeded; //这个属性设置为YES,当内容改变时会自动调用
每次想要将CIFilter应用于图像时,有4个步骤: 1、创建一个CIImage对象。...输出CIImage对象时,您将始终需要一个。 3、创建一个CIFilter。创建过滤器时,您可以配置依赖于您使用的过滤器的许多属性。 4、获取过滤器输出。...在这里,您设置CIContext对象并使用它来绘制CGImage。...4、 cropping(to rect: CGRect)输出CIImage并将其作用到所提供的rect。在这种情况下,您需要裁剪CIRandomGenerator过滤器的输出,因为它无限制地打砖块。...如果您在某些时候没有裁剪,就会出现一个错误,表示过滤器具有“无限长度”。CIImages实际上并不包含图像数据,它们描述了创建它的“配方”。直到你在CIContext上调用一个方法来实际处理数据。
context, CGRectMake(lineOrigin.x + offsetX + marginX, lineOrigin.y, size.width, size.height), image.CGImage...); // 如果用UIKit的方法进行绘制,会出现上下颠倒的情况 // [image drawInRect:CGRectMake(lineOrigin.x...和CG坐标系的不同,如果直接使用UIImage的draw方法会出现上下颠倒的情况,所以这里使用CGContextDrawImage的绘制方式避免上下颠倒; 最终的绘制效果: ?...FillColor和StrokeColor的区别 在用CGContext绘制的时候,经常需要设置颜色,常用的有下面两种: CG_EXTERN void CGContextSetFillColor(CGContextRef...,绘制上对应的图片。
UIKit与Core Graphics的关系 在UIKit中,UIView类本身在绘制时自动创建一个图形环境,即Core Graphics层的CGContext类型,作为当前的图形绘制环境。...在绘制时可以调用 UIGraphicsGetCurrentContext 函数获得当前的图形环境,例如: - (void)drawRect:(CGRect)rect { // Drawing code...Quartz 2D采用paint模式进行绘制。 图形环境Context Quartz 2D中使用的图形环境也由一个类CGContext表示。 在Quartz 2D中可以把一个图形环境作为一个绘制目标。...Quartz 2D提供的主要类包括: CGContext:表示一个图形环境; CGPath:使用向量图形来创建路径,并能够填充和stroke; CGImage:用来表示位图; CGLayer:用来表示一个能够用于重复绘制和...走封装的路子,你的工程中就可以只在这些封装中调用 C++ 代码,从而避免掉很多让人头痛的问题,比如直接改文件后缀名会因为在错误的文件中引用了一个 C++ 头文件而产生难以追踪的编译错误。