文章目录
  1. 1. 相关函数
    1. 1.1. 获取当前上下文
    2. 1.2. 创建一特定的上下文
    3. 1.3. 移除UIGraphicsPushContext创建的上下文
    4. 1.4. 创建位图图形当前上下文
    5. 1.5. 创建位图上下文
    6. 1.6. 获取基于当前上下文的图片
    7. 1.7. 移除位于栈顶的当前上下文
  2. 2. 补充知识

相关函数

UIGraphicsGetCurrentContext
UIGraphicsPushContext
UIGraphicsPopContext
UIGraphicsBeginImageContext
UIGraphicsBeginImageContextWithOptions
UIGraphicsGetImageFromCurrentImageContext
UIGraphicsEndImageContext
UIRectClip
UIRectFill
UIRectFillUsingBlendMode
UIRectFrame
UIRectFrameUsingBlendMode

获取当前上下文

The current graphics context is nil by default. Prior to calling its drawRect: method, view objects push a valid context onto the stack, making it current. If you are not using a UIView object to do your drawing, however, you must push a valid context onto the stack manually using the UIGraphicsPushContext function.This function may be called from any thread of your app.

1
CGContextRef UIGraphicsGetCurrentContext ( void );

创建一特定的上下文

You can use this function to save the previous graphics state and make the specified context the current context. You must balance calls to this function with matching calls to the UIGraphicsPopContext function.

1
void UIGraphicsPushContext ( CGContextRef context );

移除UIGraphicsPushContext创建的上下文

1
void UIGraphicsPopContext ( void );

创建位图图形当前上下文

1
void UIGraphicsBeginImageContext ( CGSize size );

size获取可以调用UIGraphicsGetImageFromCurrentImageContext

创建位图上下文

1
void UIGraphicsBeginImageContextWithOptions ( CGSize size, BOOL opaque, CGFloat scale );

UIGraphicsBeginImageContext ( CGSize size )等价于UIGraphicsBeginImageContextWithOptions透明度设置为NO,scale设置为1的情况
UIGraphicsBeginImageContextWithOptions中,官方提供了如下说明the environment also uses the default coordinate system for UIKit views, where the origin is in the upper-left corner and the positive axes extend down and to the right of the origin,可见,’UIGraphicsBeginImageContextWithOptions’创建的上下文是无需转换坐标系的

使用场景特别说明
While the context created by this function is the current context, you can call the UIGraphicsGetImageFromCurrentImageContext function to retrieve an image object based on the current contents of the context. When you are done modifying the context, you must call the UIGraphicsEndImageContext function to clean up the bitmap drawing environment and remove the graphics context from the top of the context stack. You should not use the UIGraphicsPopContext function to remove this type of context from the stack.
In most other respects, the graphics context created by this function behaves like any other graphics context. You can change the context by pushing and popping other graphics contexts. You can also get the bitmap context using the UIGraphicsGetCurrentContext function.

获取基于当前上下文的图片

1
UIImage * UIGraphicsGetImageFromCurrentImageContext ( void );

移除位于栈顶的当前上下文

1
void UIGraphicsEndImageContext ( void );

补充知识

原文索引位图(标量图)和矢量图的区别

1.位图图像(bitmap)
亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。

2.矢量图
矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。例如一幅花的矢量图形实际上是由线段形成外框轮廓,由外框的颜色以及外框所封闭的颜色决定花显示出的颜色。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。矢量图形最大的优点是无论放大、缩小或旋转等不会失真;最大的缺点是难以表现色彩层次丰富的逼真图像效果。AI和CDR是众多矢量图形设计软件中的佼佼者。大名鼎鼎的FlashMX制作的动画也是矢量图形动画。

3.计算机中显示的图形一般可以分为两大类——矢量图和位图。

  矢量图,也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。矢量图可以在维持它原有清晰度和弯曲度的同时,多次移动和改变它的属性,而不会影响图例中的其它对象。这些特征使基于矢量的程序特别适用于图例和三维建模,因为它们通常要求能创建和操作单个对象。基于矢量的绘图同分辨率无关。

  矢量图与位图最大的区别是,它不受分辨率的影响。因此在印刷时,可以任意放大或缩小图形而不会影响出图的清晰度,可以按最高分辨率显示到输出设备上。

4.区别与作用
矢量图是用一系列计算指令来表示的图,因此矢量图是用数学方法描述的图,本质上是很多个数学表达式的编程语言表达。画矢量图的时候如果速度比较慢,可以看到绘图的过程,可以理解为一个“形状”,比如一个圆,一个抛物线等等,因此缩放不会影响其质量。

  矢量图,也称为面向对象的图像或绘图图像,繁体版本上称之为向量图,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。既然每个对象都是一个自成一体的实体,就可以在维持它原有清晰度和弯曲度的同时,多次移动和改变它的属性,而不会影响图例中的其它对象。这些特征使基于矢量的程序特别适用于图例和三维建模,因为它们通常要求能创建和操作单个对象。基于矢量的绘图同分辨率无关。这意味着它们可以按最高分辨率显示到输出设备上。

  矢量图以几何图形居多,图形可以无限放大,不变色、不模糊。常用于图案、标志、VI、文字等设计。常用软件有:Coreldraw、Illustrator、Freehand、XARA等。

  位图是象素集合,又称光栅图,一般用于照片品质的图像处理,是由许多像小方块一样的像素组成的图形。由像素的位置与颜色值表示,能表现出颜色阴影的变化。

  简单说,位图就是以无数的色彩点组成的图案,当你无限放大时你会看到一块一块的像素色块,效果会失真。常用于图片处理、影视婚纱效果图等,象常用的照片,扫描,数码照片等,常用的工具软件:Photoshop,Painter等。

  Photoshop主要处理的是位图图像。当您处理位图图像时,可以优化微小细节,进行显著改动,以及增强效果。位图图像,亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增多单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。由于每一个像素都是单独染色的,您可以通过以每次一个像素的频率操作选择区域而产生近似相片的逼真效果,诸如加深阴影和加重颜色。缩小位图尺寸也会使原图变形,因为此举是通过减少像素来使整个图像变小的。同样,由于位图图像是以排列的像素集合体形式创建的,所以不能单独操作(如移动)局部位图。

  处理位图时,输出图像的质量决定于处理过程开始时设置的分辨率高低。分辨率是一个笼统的术语,它指一个图像文件中包含的细节和信息的大小,以及输入、输出、或显示设备能够产生的细节程度。操作位图时,分辨率既会影响最后输出的质量也会影响文件的大小。处理位图需要三思而后行,因为给图像选择的分辨率通常在整个过程中都伴随着文件。无论是在一个300dpi的打印机还是在一个2570dpi的照排设备上印刷位图文件,文件总是以创建图像时所设的分辨率大小印刷,除非打印机的分辨率低于图像的分辨率。如果希望最终输出看起来和屏幕上显示的一样,那么在开始工作前,就需要了解图像的分辨率和不同设备分辨率之间的关系。显然矢量图就不必考虑这么多。

注:矢量图可以用软件直接转换成位图,但是位图转矢量图一般要重新来画,并且不一定精确,所以请大家在和客人确认Logo的时候,一定要让客人提供矢量图。

文章目录
  1. 1. 相关函数
    1. 1.1. 获取当前上下文
    2. 1.2. 创建一特定的上下文
    3. 1.3. 移除UIGraphicsPushContext创建的上下文
    4. 1.4. 创建位图图形当前上下文
    5. 1.5. 创建位图上下文
    6. 1.6. 获取基于当前上下文的图片
    7. 1.7. 移除位于栈顶的当前上下文
  2. 2. 补充知识