2011-12-16 57 views
3

我們正在創建一個iOS照片應用程序。在這樣做的時候,我們必須創建大小約2500x1600px的動態大小的圖片。一旦這個圖像被創建,我們想要在較大的圖像上合理快速地繪製較小的圖像。iOS:如何創建並繪製(並保存)比屏幕更大的圖像?

我們可以看到它的問題是不可能獲得大於屏幕分辨率的上下文。該調用不會崩潰,但會返回一個無上下文。這樣一個看似簡單的任務怎麼可能實現呢?

其次,一旦創建了這個上下文,在大的頂部給定位置繪製一個小圖像的最快方法是什麼?

編輯:

我們找到了解決辦法。 CGBitmapContextCreate返回nil,因爲寬度和高度參數設置爲浮點數,而不是int。有時候解決方案就在你面前,而你太盲目了,看不到它。希望這個答案可以幫助其他人以某種方式有相同的問題。

+0

我相信這個限制不是屏幕大小,而是內存。對於在WWDC 2010視頻中顯示內存過大的圖像問題有很好的討論(如果這就是您要求的)。 – matt 2011-12-16 04:47:05

回答

1

確保將整數寬度和高度指定爲CGBitmapContextCreate的參數,否則返回nil。否則,只要你可以爲它存儲足夠的內存,上下文的大小就不重要。

0

應該可以獲得幾乎所有可以爲其分配/ malloc足夠的內存的位圖的上下文,在您的情況下,應該是2500x1600x4字節的ARGB像素的倍數。

您可能還想使用CATiledLayer進行研究,在這種情況下,您只需繪製小圖像所覆蓋的圖塊即可。您可能需要平鋪以支持受適合GPU紋理緩存的最大拼貼大小限制的較舊設備。