0 CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文 1 CGContextMoveToPoint 开始画线 2 CGContextAddLineToPoint 画直线 4 CGContextAddEllipseInRect 画一椭圆 4 CGContextSetLineCap设置线条终点形状 4 CGContextSetLineDash 画虚线 4 CGContextAddRect 画一方框 4 CGContextStrokeRect指定矩形 4 CGContextStrokeRectWithWidth 指定矩形线宽度 4 CGContextStrokeLineSegments 一些直线 5CGContextAddArc 画已曲线 前俩店为中心 中间俩店为起始弧度 最后一数据为0则顺时针画 1则逆时针 5CGContextAddArcToPoint(context,0,0, 2, 9, 40);//先画俩条线从point 到 弟1点 , 从弟1点到弟2点的线 切割里面的圆 6 CGContextSetShadowWithColor 设置阴影 7 CGContextSetRGBFillColor 这只填充颜色 7CGContextSetRGBStrokeColor 画笔颜色设置 7 CGContextSetFillColorSpace 颜色空间填充 7CGConextSetStrokeColorSpace 颜色空间画笔设置 8 CGContextFillRect 补充当前填充颜色的rect 8CGContextSetAlaha 透明度 9 CGContextTranslateCTM 改变画布位置 10 CGContextSetLineWidth 设置线的宽度 11 CGContextAddRects 画多个线 12 CGContextAddQuadCurveToPoint 画曲线 13 CGContextStrokePath开始绘制图片 13 CGContextDrawPath 设置绘制模式 14 CGContextClosePath 封闭当前线路 15CGContextTranslateCTM(context, 0, rect.size.height); CGContextScaleCTM(context, 1.0, -1.0);反转画布 16 CGContextSetInterpolationQuality 背景内置颜色质量等级 16 CGImageCreateWithImageInRect从原图片中取小图 17 字符串的 写入可用 nsstring本身的画图方法 - (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode alignment:(UITextAlignment)alignment;来写进去即可 18对图片放大缩小的功能就是慢了点 UIGraphicsBeginImageContext(newSize); UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext(); 19 CGColorGetComponents() 返回颜色的各个直 以及透明度 可用只读constfloat 来接收 是个数组 20 画图片 CGImageRef image=CGImageRetain(img.CGImage);CGContextDrawImage(context, CGRectMake(10.0, height - 100.0, 90.0, 90.0), image); 21 实现逐变颜色填充方法 CGContextClip(context); CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); CGFloatcolors[] = { 204.0 / 255.0, 224.0 / 255.0, 244.0 / 255.0, 1.00, 29.0 / 255.0, 156.0 / 255.0,215.0 / 255.0, 1.00, 0.0 / 255.0, 50.0 / 255.0, 126.0 / 255.0, 1.00, }; CGGradientRefgradient = CGGradientCreateWithColorComponents (rgb, colors, NULL,sizeof(colors)/(sizeof(colors[0])*4)); CGColorSpaceRelease(rgb); CGContextDrawLinearGradient(context, gradient,CGPointMake (0.0,0.0) ,CGPointMake(0.0,self.frame.size.height),kCGGradientDrawsBeforeStartLocation); 22 注: 画完图后,必须 先用CGContextStrokePath来描线,即形状 后用CGContextFillPath来填充形状内的颜色. 填充一个路径的时候,路径里面的子路径都是独立填充的。 假如是重叠的路径,决定一个点是否被填充,有两种规则 1,nonzero winding number rule:非零绕数规则,假如一个点被从左到右跨过,计数器+1,从右到左跨过,计数器-1,最后,如果结果是0,那么不填充,如果是非零,那么填充。 2,even-odd rule: 奇偶规则,假如一个点被跨过,那么+1,最后是奇数,那么要被填充,偶数则不填充,和方向没有关系。Function Description CGContextEOFillPath 使用奇偶规则填充当前路径 CGContextFillPath 使用非零绕数规则填充当前路径 CGContextFillRect 填充指定的矩形 CGContextFillRects 填充指定的一些矩形CGContextFillEllipseInRect 填充指定矩形中的椭圆 CGContextDrawPath 两个参数决定填充规则,kCGPathFill表示用非零绕数规则,kCGPathEOFill表示用奇偶规则,kCGPathFillStroke表示填充,kCGPathEOFillStroke表示描线,不是填充 设置当一个颜色覆盖上另外一个颜色,两个颜色怎么混合 默认方式是 result = (alpha * foreground)+ (1 - alpha) * background CGContextSetBlendMode :设置blend mode. CGContextSaveGState :保存blend mode. CGContextRestoreGState:在没有保存之前,用这个函数还原blend mode.CGContextSetBlendMode 混合俩种颜色
透明层次

CGContextBeginTransparencyLayer/CGContextEndTransparencyLayer

渐变效果

1. 用两种方法创建渐变效果:CGShadingRef, CGGradientRef。

2. axial gradient:线性渐变, radical gradient 径向渐变

3. 可以只对透明度渐变。

4.CGShadingRef, 需要提供自定义的渐变函数。 CGGradientRef,需要提供自定义的线性渐变颜色数组。

5.使用CGGradient: 创建对象,使用CGContextDrawLinearGradient和CGContextDrawRedialGradient,释放对象。

6. 使用CGShading: 创建对象,创建函数,设置绘制状态,绘制对象,释放对象。

添加2D阴影

1. 阴影属性:x偏移,y偏移,模糊程度

2. CGContextSetShadow,阴影颜色(0,0,0,1/3),

CGContextSetShadowWithColor

3. 属于GraphicsState

绘制模板

1. 模板:一系列绘制操作的集合,可以和颜色一样使用。屏幕会被分为模板网格,每个网格绘制一次模板。

2. 模板网格需要定义边界,网格在边界内绘制。

3. 模板网格间可以定义间隔大小,可以使用模板矩阵定义模板空间。

4. 颜色模板:在模板中定义颜色。

stencil模板:在模板中定义mask。

5. 拉伸:不拉伸/最小变形/常数间隔

6. CGContextFillPattern

7. 绘制颜色模板:

- 自定义绘制函数。

- 创建模板颜色空间。

- 创建颜色模板对象。

- 设置颜色模板对象。

8. 绘制stencil模板对象:同上。

坐标变换

1.Quartz支持两种坐标系统:

- 用户坐标空间:用于文档页面的坐标系统,使用浮点数标记,与分辨率无关。

- 设备坐标空间:显示设备的坐标系统,使用整数标记,与分辨率相关。

Quartz自动将用户坐标空间匹配到设备坐标空间。

2. CTM进行坐标变换,创建Context时CTM是单位阵。

3. Rotation,Scaling,Translation

4. 创建CGAffineTransform,并应用到CTM上

5. CGAffineTransformEqualToTransform/CGAffineTransformIsIdentity

6. CGContextGetUserSpaceToDeviceSpaceTransform/

CGContextConverPointToDeviceSpace/CGContextConvertPointToUserSpace

CGContextConverSizeToDeviceSpace/CGContextConvertSizeToDeviceSpace

CGContextConvertRectToDeviceSpace/CGContextConverRectToUserSpace

颜色和颜色空间

1. 三色:RGB或者CMY

2. 视觉由视锥细胞和视杆细胞产生。视锥细胞感应亮度,视杆细胞会对蓝色和红色产生感应,默认对黄色产生感应。

3. HSV:Hue,Saturation,Value

4. 屏幕使用颜色相加机制,打印机使用颜色相减机制。

5. 颜色空间:

- 灰度空间:0黑,0.5灰,1.0白

- RGB空间:R G B C M Y K W, sRGB:对RGB的矫正,增加在色温为6500度时做2.2Gamma矫正。

- HSV,HSL

- CMY,CMYK:C = 1- R, M= 1-G, Y= 1-B

- XYZ:CIE based color space。独立于显示设备的颜色空间。所有CIE颜色空间都基于XYZ颜色空间。

XYZ分别代表三种视觉感知细胞对光源的感知程度,由大量的实验统计得出,Y为光强。XYZ为非线性空间。

Yxy 空间:Y =Y, x = X/(X+Y+Z), y = Y/(X+Y+Z)

- LUV空间:对XYZ空间的非线性校正,定义了某个颜色到一个参考白点的距离。不是设备独立的颜色空间。用于比较相似的颜色。

- 索引颜色空间:调色板。

- 名字颜色空间:每种颜色有对应的名字。

6. 颜色管理系统:

- 颜色特性集合。

- 颜色管理模块。

- 颜色匹配系统。

7. 颜色在不同空间转换时会造成颜色丢失。

8. 颜色空间描述:最亮点,最暗点,与目标设备的区别,RGBCMY的最大强度等。创建图像设备的描述叫Source Profile,显示图像设备的描述叫Destination Profile。

9. Profile Connection Space:将一个设备独立颜色空间的颜色转换为设备依赖颜色空间的颜色,使用颜色空间描述转换。

10. 描述类型:

- 设备描述:描述一个设备,包括输入,显示和输出设备。输入包括扫描仪和相机,输出包括打印机和电影拷贝,显示包括显示器和LCD。

- 颜色空间描述:

- 抽象描述:用户自定义的颜色空间描述。

- 设备连接描述:直接描述设备间颜色转换的描述。

- 命名颜色空间的描述:

颜色空间描述能够被嵌入到图像中。

11. 绘制目的:CGContextSetRenderingIntent,默认kCGRenderingIntentDefault

- 视觉匹配:不同设备输出在视觉上保持一致。 kCGRenderingIntentPerceptual

- 相对色阶匹配:kCGRenderingIntentRelativeColorimetric

- 饱和度匹配:kCGRenderingIntentSaturation

- 绝对色阶匹配:kCGRenderingIntentAbsoluteColorimetric

12. ColorSync:苹果的设备独立颜色管理系统。

13. Alpha值:半透明。CGContextSetAlpha,CGContextClearRect

14. Quartz支持创建设备独立颜色空间。iOS只支持设备相关颜色空间。

CGColorSpaceCreateLab/CGColorSpaceCreateICCBased/CGColorSpaceCreateCalibrateRGB/CGColorSpaceCreateCalibrateGray

CGColorSpaceGenericGray/CGColorSpaceGenericRGB/CGColorSpaceGenericCMYK

CGColorSpaceCreateDeviceGray/CGColorSpaceCreateDeviceRGB/CGColorSpaceCreateDeviceCMYK

CGColorSpaceCreateIndexed/CGColorSpaceCreatePattern

15. Quartz中某个颜色必须和某个颜色空间相关。

CGContextSetFillColorSpace/CGContextSetStrokeColorSpace

CGContextSetRGBFillColor/CGContextSetRGBStokeColor

CGContextSetCMYKFillColor/CGContextSetCMYKStrokeColor

CGContextSetGrayFillColor/CGContextSetGrayStrokeColor

CGContextSetFillColorWithColor/CGContextSetStrokeColorWithColor (pass CGColor which specifies color space)

CGContextSetFillColor/CGContextSetStrokeColor (current color space)

16. 创建颜色:CGColorCreate

Paths

1. 向量绘制,用路径来描述图形,可以是闭合也可以不是闭合。

2. Building Blocks:

- 点: CGContextMoveToPoint

-线: CGContextAddLineToPoint, CGContextAddLines

-圆弧:CGContextAddArc,CGContextAddArcToPoint

-曲线:Quadratic/Cubic Bezier曲线, CGContextAddCurveToPoint, CGContextAddQuadCurveToPoint

- CGContextClosePath会被某些操作默认执行。

- 椭圆:CGContextAddEllipseInRect;

- 矩形: CGContextAddRect;

3. 创建Path CGContextBeginPath + CGContextMoveToPoint

4. Painting Path != Create Path

5. Mutable Path: Path对象,独立于Context存在。CGContextAddPath来使用它。

- CGPathCreateMutable = CGContextBeginPath

- CGPathMoveToPoint = CGContextMoveToPoint

- CGPathAddLineToPoint = CGContextAddLineToPoint

- CGPathAddCurveToPoint = CGContextAddCurveToPoint

- CGPathAddEllipseInRect = CGContextAddEllipseInRect

- CGPathAddArc = CGContextAddArc

- CGPathAddRect = CGContextAddRect

- CGPathCloseSubPath = CGContextCloseSubPath

6. 描边

- 线宽:

- 连接方式:Miter尖角,Round圆角,Bevel平角

- 线头:Butt平头,Round圆头,Projecting扩展平头

- 角限:限制尖角连接的范围

- 点划模板:

- 颜色空间:

- 颜色:

- StrokePattern?

CGContextStrokePath/CGContextStrokeRect/CGContextStrokeRectWithWidth/CGContextStrokeEllipseInRect/CGContextStrokeLineSegment/CGContextDrawPath

7.填充规则:

- nonzero winding:CGContextFillPath从某点出发向图形边缘做一条射线,如果射线和图形某条边相交,且该边从坐向右穿过射线,则相交计数+1,如果该边从右向左穿过射线,则相交计数-1。如果最后相交计数为1,则该点在图形内。

- even odd:CGContextEOFillPath从某点出发向图形边缘做一条射线,如果射线和图形边相交点数为奇数,则该点在图形内。

8. CGContextFillPath/CGContextEOFillPath/CGContextFillRect/CGContextFillRects/CGContextFillEllipseInRect/CGContextDrawPath

9. 混合:CGContextSetBlendMode – GraphicsState, 通常:

- Normal: result  = result = (alpha*fore) + (1.0-alpha)*back;

- Multiply: result = fore*back;

- Screen: result = 1.0-(1.0-fore)*(1.0-back);

- Overlay: result = gray(back)>0.5?(1.0-2.0*(1.0-back)*(1.0-fore):fore*back*2.0f;

- Darken: result = min(fore,back);

- Lighten: result = max(fore,back);

- Color Dodge: result = back/(1.0-fore);

- Color Burn: result = 1.0 – (1.0-back)/fore;

- Soft Light: result = gray(fore)>0.5? 1.0 – (1.0-back)*(1.5 – fore):back*(fore+0.5);

- Hard Light: result = gray(fore)>0.5?1.0 – 2.0*(1.0-back)*(1.0-fore):2.0*back*fore;

- Difference: result = abs(fore-back);

- Exclusion: result = 0.5 – 2.0*(fore – 0.5)*(back-0.5);

- Hue: result = lum(back), sat(back),hue(fore);

- Saturtation: result = lum(back),sat(fore),hue(back);

- Color: result = lum(back),sat(fore),hue(fore);

- Luminosity: result = lum(fore),sat(back),hue(back);

10.裁剪: CGConextClip/CGContextEOClip/CGContextClipToRect/CGContextClipToRects/CGContextClipToMask;

GraphicsContext

1. CGContext类。

2. UIView::DrawRect函数

3. UIGraphicsGetCurrentContext()函数

4. UIView坐标系和Quartz坐标系相反。

5. CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];

6. initWithFrame, intWithCoder, DrawRect

7. CGPDFContextCreateWithURL, CGPDFContextCreate

CFURLCreateWithFileSystemPath(), CGDataConsumerCreateWithURL()

8. iOS 推荐使用 UIGraphicsBeginImageContextWithOptions,它会自动做Quartz和UIKit之间的坐标变换。

9. CGBitmapContextCreate

10. Pixel Format

NULL color space:

- kCGImageAlphaoOnly 8bpp = A8

Gray color space:

- kCGImageAlphaNone 8bpp = L8

- kCGImageAlphaOnly 8bpp = A8

- kCGImageAlphaNone 16bpp = L16

- KCGImageAlphaNone|kCGBitmapfloatComponents = L32F

RGB color space:

- kCGImageAlphaNoneSkipFirst, 16bpp, 5bpc = R5G5B5X1

- kCGImageAlphaNoneSkipFirst, 32bpp, 8bpc = R8G8B8X8

- kCGImageAlphaNoneSkipLast, 32bpp, 8bpc = X8R8G8B8

- kCGImageAlphaPremultipliedFirst, 32bpp, 8bpc = R8G8B8A8

- kCGImageAlphaPremultipliedLast, 32bpp, 8bpc = A8R8G8B8

- kCGImageAlphaPremultipledLast, 64bpp, 16bpc = A16R16G16B16

- kCGImageAlphaNonSkipLast, 64bpp, 16bpc = X16R16G16B16

- kCGImageAlphaNoneSkipLast|kCGBitmapFloatComponents, 128bpp, 32bpc = X32R32G32B32F

- kCGImageAlphaPremultipliedLast | kCGBitmapFloatComponents, 128bpp, 32bpc = A32R32G32B32F

CMYK space:

- kCGImageAlphaNone 32bpp, 8bpc = C8M8Y8K8

- kCGImageAlphaNone 64bpp, 16bpx = C16M16Y16K16

- kCGImageAlphaNone|kCGBitmapFloatComponents = C32M32Y32K32F

11. CGContextSetShouldAntialias for bitmap context, CGContextSetAllowAntialasing for graphics context.

iOS中的图形和绘制

1、iOS支持OpenGL ES和Quartz/UIKit/CoreAnimation绘制接口。UIKit绘制必须在主线程中完成。

2、Quartz支持基于路径的绘制,反走样,填充,图像,上色,坐标变换,pdf绘制显示解析等功能。

3、UIKit支持线条绘制、图像和颜色操作。

4、Core Animation支持动画绘制。

5、View的使用DrawRect绘制,以下行为会触发:

- View的移动和遮挡。

- View的隐藏和显示。

- 拖动View。

- 显示调用setNeedDisplay和setNeedDispalyRect

6、UIKit左上角为原点,右下角为终点。CoreAnimation坐下角为原点,右上角为终点。使用CGContextRotateCTM、CGContextScaleCTM、CGContextTranslateCTM来变换矩阵,或者直接使用CGAffineTransform设置变换矩阵。

7、CGContext绘制上下文,对于Bitmap和PDF,可以创建不同的context类型。

- 变换矩阵

- 裁剪范围

- 线条绘制属性

- 曲线精度

- 反走样

- 填充属性,描边属性

- 半透明属性

- 颜色空间

- 文字

- 颜色混合模式

8、使用UIGraphicsGetCurrentContext来获取当前的CGContext。

9、UIGraphicsBeginImageContextWithOptions和UIGraphicsEndImageContext用来包含图像绘制的代码。

UIGraphicsBeginPDFContextToFile(ToData)和UIGraphicsEndPDFContext用来包含PDF绘制的代码。

10、Path绘制,即向量绘制。推荐使用UIBezierPath,其次是CGPath。

11、翻转屏幕变换:

CGContextTranslateCTM(graphicsContext, 0.0, drawingRect.size.height);
CGContextScaleCTM(graphicsContext, 1.0, -1.0);

12、Point通常等于Pixel,但是可以指定一个Point对应多个Pixel。

13、使用UIColor坐颜色空间变换。

14、绘制性能:

- 最小化绘制调用

- 尽量使用不透明的View

- 在卷屏时重用View和表格

- 在卷屏时可以不清空上次绘制结果

- 减少绘制状态切换。

iOS 画图context/QuartzCore(相关函数的解释)相关推荐

  1. ios 画图_技术成长笔记_新浪博客

    Part 1 ios界面常用控件 1.要了解如何在您的代码中显示一个较大的非网络活动指示器,请参考UIActivityIndicatorView类参考. 2.要了解如何显示网络活动指示器,请参考UIA ...

  2. android ios 画图 app,手残党也能自画“小怪兽”?这些画图app你必须知道!

    原标题:手残党也能自画"小怪兽"?这些画图app你必须知道! 如今,手机在手,所有事情都变得越来越简单,画画也是. 年轻人的流行主题总是来得又快,走得也急.这个现象在大家的朋友圈中 ...

  3. java context.xml_java-context.xml的解释

    使用Tomcat时,我始终将web.xml视为.htaccess或httpd.conf的一种.很自然,可能必须有某种配置Web服务器的方法. 但是,我不太了解context.xml的目的.例如,当使用 ...

  4. ios中strong和weak的解释理解

    来自stackoverflow解释的挺有意思的 Imagine our object is a dog, and that the dog wants to run away (be dealloca ...

  5. iOS App开发成本高背后的解释

    快速的技术发展使手机成为人类生活的重要组成部分.智能手机越来越吸引数字世界的用户,全球智能手机订阅量超过 60 亿.中国.印度和美国是智能手机用户数量最多的国家.移动应用程序是这种数字化转型的主要贡献 ...

  6. iOS 画图工具的截图

    画图工具的截图       (适用于很长的图纸) 点中最底下的最大的背景板,然后command+全部选中 点击PNG以后就是把这个图纸粘贴出来了,复制到 command+n然后 建一个空的表然后cmm ...

  7. iOS开发--TableView详细解释

    -.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [DataTa ...

  8. 【IOS开发高级系列】异步绘制专题

    1 图片处理 1.1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGIm ...

  9. Go Context 详解之终极无惑

    文章目录 1.什么是 Context 2.为什么要有 Context 3.context 包源码一览 3.1 Context 3.2 CancelFunc 3.3 canceler 3.4 Conte ...

最新文章

  1. redhat下配置SEED DVS6446开发环境3
  2. Unicode utf8等编码类型的原理
  3. 看几道JQuery试题后总结(下篇)
  4. 向圣诞老人和他的精灵学习Google Analytics(分析)
  5. 天联高级版客户端_壹拓网科技关于金万维天联标准版、异速联和天联高级版区别的讲解...
  6. 2 怎么用vite_在国内怎么玩steam服帝国时代2决定版?用斧牛加速器
  7. 全国计算机二级c语言和江苏教材一样吗,计算机二级省级和全国计算机二级考试内容一样吗...
  8. Python 爬取揭秘,你的考研调剂对手就有谁?
  9. python tkinter 定时_如何使用tkinter创建计时器?
  10. 计算机二级模拟系统在线,计算机二级foxbase题库系统
  11. jieba库和wordcloud库
  12. matlab 平滑曲线连接_MATLAB数据可视化
  13. ssis 链接mysql_SSIS 连接数据
  14. linux md5sum 文件夹,linux md5sum 的用法
  15. 谷歌邮箱无法显示使用 Base64 处理的图片的解决方法
  16. Mac删除Python缓存文件
  17. 8分钟腹肌锻炼日志(第20天)过冬ing
  18. 【重构学习】02 何处重构?
  19. Confluence 6 教程:空间高手
  20. html书写表单laber,day02_HTML表格列表表单

热门文章

  1. 笔记本html到电视,笔记本怎么连接液晶电视 笔记本连接液晶电视方法【详解】...
  2. c语言wb是标识符,C语言文件 "w+"与"wb+"区别
  3. Oracle数据库系统结构一(存储结构)
  4. AI-常见机器学习算法介绍
  5. html5 游戏 动画设计,11款效果惊艳的HTML5动画应用
  6. Unity3D学习之添加耀斑,添加天空,添加画中画。
  7. 计算机不识别lacie硬盘,windows10系统下移动硬盘读不出来的三种解决方案
  8. 智能骨科图像方向,按照期刊进行的文献整理
  9. pandas matplotlib 用于数据分析和可视化
  10. ddr5和ddr4的区别 ddr5和ddr4性能差别