Quartz 2D在ios中的使用简述二:创建画布

  在iOS中使用Quartz画图时,第一步就是要获取画布(图形上下文),然后再画布上做各种操作。先看下CoreGraphics.h这个头文件,就可以知道能够创建多少种上下文类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <CoreGraphics/CGBase.h>
 
#include <CoreGraphics/CGAffineTransform.h>
#include <CoreGraphics/CGBitmapContext.h>
#include <CoreGraphics/CGColor.h>
#include <CoreGraphics/CGColorSpace.h>
#include <CoreGraphics/CGContext.h>
#include <CoreGraphics/CGDataConsumer.h>
#include <CoreGraphics/CGDataProvider.h>
#include <CoreGraphics/CGError.h>
#include <CoreGraphics/CGFont.h>
#include <CoreGraphics/CGFunction.h>
#include <CoreGraphics/CGGeometry.h>
#include <CoreGraphics/CGGradient.h>
#include <CoreGraphics/CGImage.h>
#include <CoreGraphics/CGLayer.h>
#include <CoreGraphics/CGPDFArray.h>
#include <CoreGraphics/CGPDFContentStream.h>
#include <CoreGraphics/CGPDFContext.h>
#include <CoreGraphics/CGPDFDictionary.h>
#include <CoreGraphics/CGPDFDocument.h>
#include <CoreGraphics/CGPDFObject.h>
#include <CoreGraphics/CGPDFOperatorTable.h>
#include <CoreGraphics/CGPDFPage.h>
#include <CoreGraphics/CGPDFScanner.h>
#include <CoreGraphics/CGPDFStream.h>
#include <CoreGraphics/CGPDFString.h>
#include <CoreGraphics/CGPath.h>
#include <CoreGraphics/CGPattern.h>
#include <CoreGraphics/CGShading.h>

  可以看到,可以创建的上下文包括:  

//图片
CGContextRef CGBitmapContextCreate
//layer(UIView)
CGContextRef CGLayerGetContext
//pdf类型
CGContextRef CGPDFContextCreate

  我们再看下UIGraphics.h这个头文件,里面已经提供这3种上下文创建的封装给UIKit使用的方法,在普通的情况下,使用UIGraphics中的方法即可,而且画布已经做了坐标的翻转。

 

 

UIKIT_EXTERN CGContextRef UIGraphicsGetCurrentContext(void) CF_RETURNS_NOT_RETAINED;

表示是个弱引用类型,直接使用,不用释放。

复制代码
        UIGraphicsBeginImageContext(self.bounds.size);
        CGContextRef context=UIGraphicsGetCurrentContext();

        CGContextSetRGBFillColor(context, 1, 0, 0, 1);
        CGContextSetRGBStrokeColor(context, 0, 1, 0, 1);
        CGContextFillRect(context, CGRectMake(0, 100, 100, 100));
        NSString *text=@"文字";
        UIFont *font=[UIFont systemFontOfSize:14];
        [text drawAtPoint:CGPointMake(0, 200) withAttributes:font.fontDescriptor.fontAttributes];
        UIImage *img=[UIImage imageNamed:@"gg.jpg"];
        [img drawInRect:CGRectMake(0, 300, 100, 100)];
        CGImageRef cgimg = CGBitmapContextCreateImage(context);
        UIImage *resultImg = [UIImage imageWithCGImage:cgimg];
        CGImageRelease(cgimg);
复制代码

 

posted @   Ethan_村长  阅读(1601)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示