我的問題與此相關link如何在iPhone中保存比設備分辨率更大的圖像?
我想知道我們如何使用CGBitmapContextCreate
將圖片保存爲比設備分辨率大的圖片。
指導任何示例代碼將不勝感激。
謝謝!
我的問題與此相關link如何在iPhone中保存比設備分辨率更大的圖像?
我想知道我們如何使用CGBitmapContextCreate
將圖片保存爲比設備分辨率大的圖片。
指導任何示例代碼將不勝感激。
謝謝!
不要使用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是:
圖像的大小 - 這可以是任何你想要的
圖像是否透明與否
圖像中的像素的比例。 0.0是默認的,所以在iPhone 3GS上它將是1.0,而在具有視網膜顯示器的iPhone 4上它將是2.0。你可以通過任何你想要的比例,所以如果你通過5.0,圖像中的每個像素單位實際上是位圖中的5×5像素,就像Retina顯示屏上的1像素實際上是2×2像素。
編輯:事實證明,是否UIGraphicsBeginImageContext()是線程安全的問題似乎有點爭議。如果你需要同時做在後臺線程,有使用CGBitMapContextCreate(替代(而更復雜的方法))在這裏:UIGraphicsBeginImageContext vs CGBitmapContextCreate
這不是很好的解決方案。 UIGraphicsBeginImageContext和其他UI ...函數不是線程安全的,它們在主要階段運行。當你使用這個功能時,你的應用程序的UI將會凍結。 – 2012-02-03 14:17:34
誰說過關於線程的任何內容?無論如何,如果你需要在一個線程上下文中使用它,你總是可以包住UIGraphicsBeginImageContext()在@Synchronized塊,做您的實際繪圖一旦你得到了CGContextRef。 – 2012-02-03 14:20:29
@MartinPilch事實上,他們都在主線程上運行是什麼使他們線程安全。他們只從一個線程調用 - **主線程,所以線程不會進入它。 – Abizern 2012-02-03 15:40:11