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框架帮你快速的处理图像.它将数字图像处理和计算机视觉应用于图像资源上.
未完待续….
- Drawing Contexts(绘图上下文)
- 上下文环境(Contexts)
- 使用Drawing 类绘图
- 绘图(Drawing)
- iOS drawing 绘图简介
- red5 Scopes and Contexts 作用域 上下文
- Block Formatting Contexts(块级格式化上下文)
- Block Formatting Contexts(块级格式化上下文)
- C++ Drawing Mode 绘图方式
- 详说 Block Formatting Contexts (块级格式化上下文)
- BFC(Block Formatting contexts): 块级格式上下文
- Quartz 2D编程指南(2)图形上下文(Graphics Contexts)
- 很好的VB.net 绘图drawing教程
- 不同的绘图设备上下文
- iOS绘图上下文的理解。
- GDI 字体 设备上下文 绘图
- Drawing
- Drawing with Alpha:使用alpha通道来绘图
- 吃妖怪的萝莉和帅气道长大叔,古风治愈漫画温暖来袭!
- Java程序如何生成Jar、exe及安装文件
- 使用Eclipse搭建Maven项目(最近做个人网站,顺便记下来以防后面的项目要用)
- kafka新手安装
- MySQL error 1449: The user specified as a definer (''@'') does not exist
- Drawing Contexts(绘图上下文)
- 使用Vue.js搭建简单的表格页面
- Linux命令-parted命令
- 详谈室内定位技术方案
- Java多线程机制
- linux 任务被stuck 或者hung住
- Memcached 入门学习二(命令操作)
- 如何编写一个简单的shell脚本.task3用到的脚本
- Studio中Git的使用