標籤:
iOS開發UI篇—Quartz2D使用(繪製基本圖形)
一、簡單說明
圖形上下文(Graphics Context):是一個CGContextRef類型的資料
圖形內容相關的作用:儲存繪圖資訊、繪圖狀態
決定繪製的輸出目標(繪製到什麼地方去?)(輸出目標可以是PDF檔案、Bitmap或者顯示器的視窗上)
相同的一套繪圖序列,指定不同的Graphics Context,就可將相同的映像繪製到不同的目標上。
Quartz2D提供了以下幾種類型的Graphics Context:
Bitmap Graphics Context
PDF Graphics Context
Window Graphics Context
Layer Graphics Context
Printer Graphics Context
只要上下文不同,繪製的地方就不同。
本文說明如何把圖片繪製到Bitmap上面去,即要求產生一張圖片,圖片上面儲存了繪圖資訊。
Bitmap就是圖片,相當於系統的UIimage。一個UIImage就是一個Bitmap
二、怎麼把圖片繪製到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 @end14 15 @implementation YYViewController16 17 - (void)viewDidLoad18 {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 //方法127 // UIGraphicsBeginImageContext(<#CGSize size#>);28 //方法229 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.顯示產生的圖片到imageview39 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)didReceiveMemoryWarning48 {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值給這些函數
iOS開發UI篇—Quartz2D使用(繪製基本圖形)