Drawing Contexts(绘图上下文)

本文介绍了iOS平台上的绘图原理及实现方法,包括UIKit与CoreGraphics的使用,如何创建自定义视图、图像、PDF文件,以及CoreImage框架的应用。详细讨论了bitmapcontext和pdfcontext的不同之处,并介绍了它们在实际开发中的应用场景。
绘制上下文是我们的应用在上面绘制图像的画布.我们用这图形上下文来创造文本,图像,以及自定义视图,绘图基本来自UIKit,Core Graphics以及Quartz.

框架
UIKit:面向对象的OC接口.
QuartzCore:C函数接口以及Core Foundation类型的对象. 也叫Quartz或Quartz 2D.

// Draw a rounded rectangle in UIKit 
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:inset cornerRadius:12]; 
[bezierPath stroke];
// Fill an ellipse in Quartz 
CGContextFillEllipseInRect(context, rect);

QuartzCore通常指Quartz或Quartz 2D.后者是苹果官方原生渲染和抗锯齿接口的名字.Quartz 2D符合了渲染以及其他的图形特性.例如动画,平铺以及core image过滤.

Quartz对于程序猿更熟悉的名字是其内部实现的名字–Core Graphics.Quartz和Core Graphics是同义使用.

iOS每个版本的更新,绘图API都会更多的向OC迁移,但是CG并未被取代,两种框架(UIKit和CG)二者一起合作.

OS绘图被限制在四种场景中:创建自定义的视图,创建图形,创建PDF,以及用Core Graphics构建.

1.创建自定义视图: 每个UIKit的视图都是一个空白的画布,想利用绘图来完全自定义一个视图的话,在drawRect:方法中绘制你的内容,在这个方法中你可以调用UIKit和Quartz来实现.drawRect:默认实现中什么也没做,子类要用UIKit或CG来重写这个方法.简单的改变背景颜色之类的绘图以及OpenGL ES-powered视图不用这个方法.drawRect:方法有一个只用于打印的close表单:drawRect:forViewPrintFormatter:允许您自定义应该打印不同于显示的内容。
2. 创建图像:并非每个图像都是以PNG或JPEG文件的形式来开始其生命的.在iOS上,你可以绘制在UIKit的image context上然后得到一个UIImage对象.这就可以创建新的图像以及修改已有的图像.绘图允许你绘制图形而不需要依赖已存在的图片文件库.代码绘制图形的好处是减小应用bundle的大小,节省了更少的资源.你的图形更加灵活,只受代码控制.
3. 创建PDF.绘制图像的api同样也支持创建pdf.你可以绘制在UIKit PDF context上,然后要么直接发送到文件中,要目保存在data中(内存中的data吗?).

PDF提供了一种高度可移植,系统无关的标准,其封装了完整的文档描述。你在iOS上创建的文档在用于查看文档的任何计算机上看起来或多或少都一样。 操作系统的颜色管理系统可能会影响颜色显示。
4. 用Core Graphics来构建
UIKit不好绘制的时候,用CG框架.CG框架用Core Foundation风格的基于C的UI对象,需要手动retain以及release.
最后的图像必须从Quartz框架的CGImageRef(CG类型的以Ref结尾的变量是指向指针的对象)转换成UIImage对象(imageWithCGImage:),并在标准的image view对象上展示.

上下文
iOS绘制都会以上下文开始,上下文特别类似于白纸或者空帆布.上下文代表绘制的目的地.上下文包含了所偶遇的绘制媒介状态的信息—例如,空白帆布是否以某种方式旋转了,什么样的颜色可以绘制到这个画布上,在每个点你可以绘制的细节程度等.

在iOS上,常用的两种绘制上下文是bitmap context和pdf context.Core Image框架提供了第三种上下文,用来执行图像处理工作而非绘制.

bitmap context:
bitmap context基本上是矩形数据数组.该数据的大小取决于每个图像元素(或“像素”)表示的颜色的种类.在彩色图像(Device RGB)中,每个像素用三或四字节—决定于透明(4)还是非透明(3).

不透明的位图会忽略半透明值,优化存储.透明图像会用一个被称作alpha的值.该值存储在与实际颜色或亮度信息不同的字节中。 它指的是每个像素的半透明度.彩色图片的颜色信息以3字节存储,每个字节对应一个红色,绿色或蓝色。

灰白图像(Device Gray),每个像素用1或2个字节.每个像素有一个亮度字节,以及一个可选的半透明字节.

PDF context
从开发者角度看,pdf context和bit context工作起来几乎一样,开发者调用一样的函数和命令,设置颜色,绘制阴影以及文本,好像是在视图上绘制或者在绘制一幅图像,然而其实是不一样的.

pdf context背后的存储上用的是向量数据.与分辨率无关的解决方案来绘制.bitmap context是光栅化的.bitmap context用像素数组来存储绘制到bitmap context的数据.

pdf context可能包含多页.你可以建立一个边界矩形,指定每个PDF页面的默认大小和位置。空白的矩形默认是A纸.也就是8.5x11英寸,或者说612x792points.

PDF绘制的内部存储为基于矢量的命令序列。这提供了一个固有的与像素无关性,这在位图绘制的时候是没法看到的.苹果文档是这么说的:”pdf文件是与分辨率无关的,pdf图像绘制到的大小可以无限放大缩小而不会牺牲图片细节,用户感知到的位图图像的质量与位图所在的图像分辨率有关.”

你绘制到pdf context上和你绘制到bitmap context一样.区别仅仅是绘制的目的地(文件以及数据表示方式),以及当你在pdf context上绘制新的页时.

Core Image Context

Core Image框架帮你快速的处理图像.它将数字图像处理和计算机视觉应用于图像资源上.

未完待续….

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值