2012-02-03 32 views

回答

4

不要使用CGBitmapContextCreate,使用UIGraphicsBeginImageContextWithOptions,它更容易。使用這樣的:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), YES, 1.0f); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

//do your drawing 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEdnImageContext(); 

//your resultant UIImage is now stored in image variable 

三個參數UIGraphicsBeginImageContext是:

  1. 圖像的大小 - 這可以是任何你想要的

  2. 圖像是否透明與否

  3. 圖像中的像素的比例。 0.0是默認的,所以在iPhone 3GS上它將是1.0,而在具有視網膜顯示器的iPhone 4上它將是2.0。你可以通過任何你想要的比例,所以如果你通過5.0,圖像中的每個像素單位實際上是位圖中的5×5像素,就像Retina顯示屏上的1像素實際上是2×2像素。

編輯:事實證明,是否UIGraphicsBeginImageContext()是線程安全的問題似乎有點爭議。如果你需要同時做在後臺線程,有使用CGBitMapContextCreate(替代(而更復雜的方法))在這裏:UIGraphicsBeginImageContext vs CGBitmapContextCreate

+1

這不是很好的解決方案。 UIGraphicsBeginImageContext和其他UI ...函數不是線程安全的,它們在主要階段運行。當你使用這個功能時,你的應用程序的UI將會凍結。 – 2012-02-03 14:17:34

+0

誰說過關於線程的任何內容?無論如何,如果你需要在一個線程上下文中使用它,你總是可以包住UIGraphicsBeginImageContext()在@Synchronized塊,做您的實際繪圖一旦你得到了CGContextRef。 – 2012-02-03 14:20:29

+0

@MartinPilch事實上,他們都在主線程上運行是什麼使他們線程安全。他們只從一個線程調用 - **主線程,所以線程不會進入它。 – Abizern 2012-02-03 15:40:11