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

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

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

  1. //图片
  2. CGContextRef CGBitmapContextCreate
  3. //layer(UIView)
  4. CGContextRef CGLayerGetContext
  5. //pdf类型
  6. CGContextRef CGPDFContextCreate

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

 

UIKIT_EXTERN CGContextRef UIGraphicsGetCurrentContext(void) CF_RETURNS_NOT_RETAINED;

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

  1. UIGraphicsBeginImageContext(self.bounds.size);
  2. CGContextRef context=UIGraphicsGetCurrentContext();
  3.  
  4. CGContextSetRGBFillColor(context, , , , );
  5. CGContextSetRGBStrokeColor(context, , , , );
  6. CGContextFillRect(context, CGRectMake(, , , ));
  7. NSString *text=@"文字";
  8. UIFont *font=[UIFont systemFontOfSize:];
  9. [text drawAtPoint:CGPointMake(, ) withAttributes:font.fontDescriptor.fontAttributes];
  10. UIImage *img=[UIImage imageNamed:@"gg.jpg"];
  11. [img drawInRect:CGRectMake(, , , )];
  12. CGImageRef cgimg = CGBitmapContextCreateImage(context);
  13. UIImage *resultImg = [UIImage imageWithCGImage:cgimg];
  14. CGImageRelease(cgimg);

Quartz 2D在ios中的使用简述二:创建画布的更多相关文章

  1. Quartz 2D在ios中的使用简述一:坐标体系

    Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境,官方文档:Quartz 2D Programming Guide. 一.坐标体系 这样的坐标体系就导致我们使用Quart ...

  2. 在iOS中使用ZBar扫描二维码

    最近在做的项目中需要用到二维码扫描功能,之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Andro ...

  3. 使用.NET中的XML注释(二) -- 创建帮助文档入门篇

    一.摘要 在本系列的第一篇文章介绍了.NET中XML注释的用途, 本篇文章将讲解如何使用XML注释生成与MSDN一样的帮助文件.主要介绍NDoc的继承者:SandCastle. 二.背景 要生成帮助文 ...

  4. Quartz 2D编程指南- PDF文档的创建、显示及转换

    PDF文档存储依赖于分辨率的向量图形.文本和位图,并用于程序的一系列指令中.一个PDF文档可以包含多页的图形和文本.PDF可用于创建跨平台.只读的文档,也可用于绘制依赖于分辨率的图形.         ...

  5. iOS中多线程知识总结(二)

    1.GCD GCD全称是Grand Central Dispatch,译为"强大的中枢管理器" 1)什么是任务?什么是队列? 任务和队列是GCD的核心. 任务: 执行什么操作 队列 ...

  6. iOS中Block介绍(二)内存管理与其他特性

    我们在前一章介绍了block的用法,而正确使用block必须要求正确理解block的内存管理问题.这一章,我们只陈述结果而不追寻原因,我们将在下一章深入其原因. 一.block放在哪里 我们针对不同情 ...

  7. iOS中的图像处理(二)——卷积运算

    关于图像处理中的卷积运算,这里有两份简明扼要的介绍:文一,文二. 其中,可能的一种卷积运算代码如下: - (UIImage*)applyConvolution:(NSArray*)kernel { C ...

  8. iOS中 基于LBXScan库二维码扫描 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 首先声明这个二维码扫描是借助于zxing. 功能模块都完全封装好了,不过界面合你口味,直接使用就好,如果不合口味,后 ...

  9. ios中字典转模型的创建以及简单用法

    // appModel.h // Created by zzqqrr on 17/8/19. // #import <Foundation/Foundation.h> @interface ...

随机推荐

  1. Node的express框架安装

    第一步:在cmd命令行下执行npm install -g express,安装全局的express. 第二步:在命令行中输入express,如果出现express不是内部命令时, 输入npm inst ...

  2. 动态创建 Lambda 表达式

    首先我们看一个简单 Lambda 表达式的构成. i => i > 5 在这个表达式中,"i" 被称为 Parameter,"i > 5" 是 ...

  3. Delphi编程时候诡异地出现ORA-00937错误,记录解决它的思路和方法

    首先需要说明,这个问题的出现需要几个前提:使用微软的Oracle驱动(使用Oracle自己的驱动不会出现这个问题).使用绑定变量法,使用Format等方式拼接SQL也不会出现这个问题,还有一些诡异的规 ...

  4. Linux 2.6内核中新的锁机制--RCU

    转自:http://www.ibm.com/developerworks/cn/linux/l-rcu/ 一. 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁 ...

  5. fragment嵌套问题

    fragment嵌套里面不能用再用getActivity().getFragmentManager()要用getChildFragmentManager()

  6. 进击的Python【第十七章】:jQuery的基本应用

    进击的Python[第十七章]:jQuery的基本应用

  7. Codeforces 144D Missile Silos 最短路

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  8. jQuery之ajax错误调试分析

    jQuery中把ajax封装得非常好.但是日常开发中,我偶尔还是会遇到ajax报错.这里简单分析一下ajax报错 一般的jQuery用法如下,ajax通过post方式提交"汤姆和老鼠&quo ...

  9. 【虚拟机】在VMware中安装Server2008之后配置网络连接的几种方式

    VMware虚拟机的网络连接方式分为三种:桥接模式.NAT模式.仅主机(Host Only) (1)桥接模式 桥接模式即在虚拟机中虚拟一块网卡,这样主机和虚拟机在一个网段中就被看作是两个独立的IP地址 ...

  10. XVII Open Cup named after E.V. Pankratiev. GP of SPb

    A. Array Factory 将下标按前缀和排序,然后双指针,维护最大的右边界即可. #include<cstdio> #include<algorithm> using ...