每个iOS的绘图操作都从一个上下文开始。从概念上讲,上下文非常类似于空白页面的纸张或空画布。他们代表着用于绘图的iOS目标。它们包含有关绘图介质状态的所有信息,例如,画布是以何种方式旋转或变换的,可以在画布上绘制什么样的颜色,可以在任何点绘制的细节的程度,等等。
在iOS中,您主要使用两种绘图上下文:位图上下文和PDF上下文。Core Image框架提供第三种上下文类型,用于执行图像处理任务而不是绘图。
位图上下文
位图上下文本质上是矩形数据数组。该数据的大小取决于每个图像元素(或“像素”)表示的颜色的种类。如图1-4左图所示,Device RGB每像素使用三个或四个字节,这取决于位图是不透明(3字节)还是透明的(4字节)。
一个不透明的位图会忽略半透明值,优化存储。半透明图像使用所谓的alpha值。该值存储在与实际颜色或亮度信息不同的字节中。它指的是每个像素的半透明度。Device RGB的颜色信息以3字节存储,每个字节对应一个红色,绿色或蓝色值。
如图1-4右侧所示,Device Gray图像每个像素使用1或2个字节。为每个像素存储一个亮度字节,并且可选地存储一个透明度字节。
PDF上下文
从开发人员的角度来看,PDF上下文的工作方式与位图上下文非常相似。可使用相同的命令和函数绘制它们。您可以像绘制视图或图像一样设置颜色并绘制形状和文本。但是,存在一定差异。
PDF上下文在其“后台存储”中包含矢量数据,以独立于分辨率的方式描述绘图。位图上下文是栅格化的。它们使用像素阵列来存储绘制到其中的数据。
PDF上下文也可能包含多个页面。您可以建立一个边界矩形,来指定每个PDF页面的默认大小和位置。空矩形(CGRectZero
)默认为标准A(字母)页。 这是8.5*11英寸,或612*792点。(第2章讨论点和像素之间的差异。)
PDF图像内部存储为基于矢量的命令序列。这提供了在位图图形中看不到的固有的与分辨率无关的特性。苹果在其文档中写道,“PDF文件是与分辨率的大小无关的 - 它们绘制的大小可以无限增加或减少,而不牺牲图像细节。而位图图像的用户感知质量与用户所要看到的位图的分辨率息息相关“。
您可以像绘制位图上下文一样绘制这些上下文。差异主要在于它们的目标(文件和数据表示)以及何时开始一个新的页面。
除了位图上下文和PDF上下文之外,您还可能遇到Core Image上下文。
Core Image上下文
Core Image框架可以帮助您极快地处理图像。 它提供将数字图像处理和计算机视觉应用于图像源的例程。有了它,您可以将过滤器、链式过滤器一起使用,实现特征检测(查找面部和眼睛),并分析图像以进行自动调整。
Core Image上下文是特定于将Core Image对象渲染到Quartz 2D和OpenGL的图像上下文。通过板载图形处理单元(GPU)加速,Core Image上下文与Core Video像素缓冲区集成。Core Image使用自己的颜色风格(CIColor
)和图像(CIImage
),它们已针对Core Image的快速过滤和图像处理功能进行了优化。
本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。