iOS開發UI篇—Quartz2D使用(繪製基本圖形)

1、簡單說明app

圖形上下文(Graphics Context):是一個CGContextRef類型的數據函數

圖形上下文的做用:保存繪圖信息、繪圖狀態atom

決定繪製的輸出目標(繪製到什麼地方去?)(輸出目標能夠是PDF文件、Bitmap或者顯示器的窗口上)spa

相同的一套繪圖序列,指定不一樣的Graphics Context,就可將相同的圖像繪製到不一樣的目標上。3d

Quartz2D提供瞭如下幾種類型的Graphics Context:code

Bitmap Graphics Context對象

PDF Graphics Contextblog

Window Graphics Context圖片

Layer Graphics Contextip

Printer Graphics Context

只要上下文不一樣,繪製的地方就不一樣。

本文說明如何把圖片繪製到Bitmap上面去,即要求生成一張圖片,圖片上面保存了繪圖信息。

Bitmap就是圖片,至關於系統的UIimage。一個UIImage就是一個Bitmap

 

2、怎麼把圖片繪製到Bitmap上?

注意:不能在drawRect:方法中直接獲取Bitmap的上下文,須要咱們本身進行建立。

代碼示例:

複製代碼
 1 //
 2 //  YYViewController.m
 3 //  06-繪製基本圖形
 4 //
 5 //  Created by apple on 14-6-22.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 @property (weak, nonatomic) IBOutlet UIImageView *iv;
13 @end
14 
15 @implementation YYViewController
16 
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20 
21     //加載圖片
22     //0.建立一個Bitmap上下文
23     //c語言的方法
24 //    CGBitmapContextCreate(<#void *data#>, <#size_t width#>, <#size_t height#>, <#size_t bitsPerComponent#>, <#size_t bytesPerRow#>, <#CGColorSpaceRef space#>, <#CGBitmapInfo bitmapInfo#>)
25     //oc中封裝的方法
26     //方法1
27 //    UIGraphicsBeginImageContext(<#CGSize size#>);
28     //方法2
29     UIGraphicsBeginImageContextWithOptions( CGSizeMake(200, 200), NO, 0);
30     //1.獲取bitmap上下文
31     CGContextRef ctx = UIGraphicsGetCurrentContext();
32     //2.繪圖(畫一個圓)
33     CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));
34     //3.渲染
35     CGContextStrokePath(ctx);
36     //4.獲取生成的圖片
37     UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
38     //5.顯示生成的圖片到imageview
39     self.iv.image=image;
40     //6.保存繪製好的圖片到文件中
41     //先將圖片轉換爲二進制數據,而後再將圖片寫到文件中
42 //    UIImageJPEGRepresentation(image, 1); //第二個參數爲保存的圖片的效果
43     NSData *data=UIImagePNGRepresentation(image);
44     [data writeToFile:@"/Users/apple/Desktop/abc.png" atomically:YES];
45 }
46 
47 - (void)didReceiveMemoryWarning
48 {
49     [super didReceiveMemoryWarning];
50     // Dispose of any resources that can be recreated.
51 }
52 
53 @end
複製代碼

程序執行效果:

程序執行完畢後,會在指定的位置建立一個abc.png的圖片

補充說明:

1.建立Bitmap圖形上下文的方法

  //方法1   UIGraphicsBeginImageContext(<#CGSize size#>);

  //方法2 UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)

使用兩個方法一樣均可以建立,可是使用第一個方法未來建立的圖片清晰度和質量沒有第二種方法的好。
方法2接收三個參數:

CGSize size:指定未來建立出來的bitmap的大小

BOOL opaque:設置透明YES表明透明,NO表明不透明

CGFloat scale:表明縮放,0表明不縮放

建立出來的bitmap就對應一個UIImage對象

 

2.Quartz2D的內存管理

使用含有「Create」或「Copy」的函數建立的對象,使用完後必須釋放,不然將致使內存泄露

使用不含有「Create」或「Copy」的函數獲取的對象,則不須要釋放

若是retain了一個對象,再也不使用時,須要將其release掉

可使用Quartz 2D的函數來指定retain和release一個對象。例如,若是建立了一個CGColorSpace對象,則使用函數CGColorSpaceRetain和CGColorSpaceRelease來retain和release對象。

也可使用Core Foundation的CFRetain和CFRelease。注意不能傳遞NULL值給這些函數

相關文章
相關標籤/搜索