Drawing Contexts(绘图上下文)

来源:互联网 发布:网络监控摄像头客户端 编辑:程序博客网 时间:2024/05/16 12:32
绘制上下文是我们的应用在上面绘制图像的画布.我们用这图形上下文来创造文本,图像,以及自定义视图,绘图基本来自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框架帮你快速的处理图像.它将数字图像处理和计算机视觉应用于图像资源上.

未完待续….

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 薯片受潮不脆了怎么办 泡过的莲子煮不烂怎么办 绿豆有煮不熟的怎么办 吃了羊肉吃西瓜怎么办 吃了狗肉和绿豆怎么办 做的衣柜没有门怎么办 蒸馒头熟了会瘪怎么办 3dmax贴图太大了怎么办 嘴皮边缘颜色深怎么办 嘴巴周围肤色暗沉怎么办 中奖彩票被洗了怎么办 牙龈下面长米粒肉疙瘩怎么办 书画印章盖反了怎么办 金龙鱼一个月不吃东西怎么办 罗汉鱼头撞扁了怎么办 房顶开槽埋线白色不一样怎么办 顶上灯挪位置线怎么办 马蜂窝弄掉又来怎么办 蜂窝弄掉又有怎么办 2018年小龙虾底板脏怎么办 一本分数线擦边过怎么办 玩具塑料球扁了怎么办 胶皮与海绵开了怎么办 安卓不支持flash了怎么办 看视频要加载flash怎么办 下水道管子铁皮破了怎么办 炸金花牌一样大怎么办 玩棋牌游戏输了怎么办 苹果7插耳机外放怎么办 出国种菠菜抓了怎么办 在菲做菠菜抓到怎么办 3串1中两个怎么办 微博账号封停怎么办 阴阳师账号被永久封停怎么办 寒刃2账号被禁用怎么办 输了好多钱我该怎么办 亲朋打鱼别处在玩怎么办 做糯米蛋的蛋清怎么办 水田地没耙地平怎么办 宝宝拉鸡蛋花样大便怎么办 电子琴伴奏区无旋律音怎么办