iphone中的繪圖相關資料

http://hi.baidu.com/yangjunfeng22/item/3f0b670c0b9f36c774cd3c93


iphone中
主要通過下面的幾個技術來繪圖
OpenGL, Quartz, UIKit, or Core Animation

UIKit 是非線程安全的,所以最好把所有的繪圖都放在主線程上執行
不管使用的哪個技術來繪圖,所有的繪圖都是在 UIView object 中進行, view決定繪圖在那裏進行

繪畫週期
當一個view需要更新某一部分內容的時候,view會請求 drawRect: 方法
在view第一次請求drawRect方法的時候,傳遞的rectangle 參數一般是view的整個rectangle ,後續更新的時候,傳遞的一般是
需要更新的那部分rectangle 

在幾種情況下,view會重新繪圖
1。移動或者移除另外一個view
2。設置view的hidden 屬性爲NO, view重新出現
3。滾動view,當滾出或者滾進來的時候
4。明確的請求setNeedsDisplay和setNeedsDisplayInRect:方法

當請求了一個 drawRect:方法,view會標誌自己已經被更新了,然後等待下一個更新請求的到達

座標系統
current transformation matrix (CTM)
默認座標原點是左上角
如果需要改變座標系統
有兩種方法
1。CGContext Reference :http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html#//apple_ref/doc/uid/TP30000950
2。CGAffineTransform :http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html#//apple_ref/c/tdef/CGAffineTransform

圖形上下文(Graphics Contexts)
當請求drawRect:方法 ,view object會自動配置圖形環境,作爲環境的一部分,uiview會創建一個圖形上下文(a CGContextRef opaque type)
圖形上下文定義基本圖形屬性,如顏色,剪切區域,線的寬度和樣式信息,字體信息,合成選項,等等。
也可以自己創建圖形上下文用 CGBitmapContextCreate 或者 CGPDFContextCreate 函數
需要注意的是,自己創建的圖形上下文的原點是在左下角
CGContextSetRGBStrokeColor and CGContextSetRGBFillColor兩個函數設置當前的筆鋒色和填充色.

iphone支持的圖形格式
.png
.tiff, .tif
.jpeg, .jpg
.gif
.bmp, .BMPf
.ico
.cur
.xbm


繪畫技巧
1。部分更新: 假如在 drawRect: 中,更新rectangle 中的部分
2。如果一個view中沒有透明部分,那麼把 opaque 屬性設置爲 YES,這樣會省很多的cpu
3。如果一張png圖片沒有任何透明的部分,那麼久刪除alpha通道,這樣渲染的時候會省很多功夫
4。滾動的時候重用table cells和views
5。正常情況下,在view請求 drawRect: 之前都會清除current context buffer,來更新相同區域.如果在滾動的時候,反覆的清除,
很浪費時間,這樣的話就把view的clearsContextBeforeDrawing 設置成NO.
6。在繪圖的時候,儘量少的圖形狀態改變.因爲改變繪圖狀態需要window的server

提高圖片質量
1。首選png圖片格式
2。使用圖片的時候,儘量的不要去改變大小,假如需要使用這個圖片在很多地方,那麼儘量使用和他們比較接近的圖片大小的圖片

Quartz 是Core Graphics的心臟, 主要提供以下東西
Graphics contexts
Paths
Images and bitmaps
Transparency layers
Colors, pattern colors, and color spaces
Gradients and shadings
Fonts
PDF content
更多的詳細內容在:http://developer.apple.com/iphone/library/documentation/CoreGraphics/Reference/CoreGraphics_Framework/index.html#//apple_ref/doc/uid/TP40007127

UIKit 是在Quartz的基本功能上的封裝.他主要提供以下類
1。UIImage
2。UIColor
3。UIFont
4。UIScreen
5。生成png或者jpeg,用UIImage表現出來的函數
6。畫矩形,和剪裁繪圖區域的函數
7。改變和獲取當前的圖形上下文
更多的內容在:http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIKit_Framework/index.html#//apple_ref/doc/uid/TP40006955

配置圖形上下文
在drawRect:中,view已經自動的爲我們創建了圖形上下文,我們可以通過函數UIGraphicsGetCurrentContext 獲取.
iphone中的繪圖相關資料 
圖形上下文使用堆棧來保存圖像狀態,CGContextSaveGState函數保存當前圖像狀態
CGContextRestoreGState函數來回到前面的版本

圖片的繪畫和創建
下面的幾個場景,最好使用下面的方法
1>當view中只有一張圖片,那麼使用UIImageView 來加載圖片
2>用代碼創建一張圖片
兩種方法,
1, 先用UIGraphicsBeginImageContext 創建一個基於圖片的圖形上下文
畫好圖形後,用UIGraphicsGetImageFromCurrentImageContext 函數,生成圖片
畫完,最後用UIGraphicsEndImageContext 關閉圖形上下文
2。用CGBitmapContextCreate 創建圖形上下文,
在上面畫圖片,用CGBitmapContextCreateImage 創建CGImageRef 
最後用CGImageRef來創建 UIImage 
3>把一張圖片保存爲jpg或者png
加載一張圖片,然後用UIImageJPEGRepresentation 或者UIImagePNGRepresentation 函數獲取加載的圖片的NSData ,然後用
NSData生成png或者jpg 

創建和繪製路徑
一個路徑是一個二維幾何場景,
UIKit 中包含 UIRectFrame UIRectFill 這 兩個方法來創建簡單的路徑,比如矩形.
Core Graphics中還包含了橢圓,等等.
CGContextBeginPath 來創建一個基於路徑的圖形上下文,然後開始創建路徑
完事後,生成 CGPathRef 或者 CGMutablePathRef 
最後用CGContextStrokePath 和CGContextFillPath 填充顏色.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章