2009-09-28 85 views
1

我基本上想要從一堆源圖像自動創建平鋪圖像,然後將其保存到用戶的相冊中。我沒有任何成功將一堆小UIImage畫成一個大UIImage。什麼是實現這一目標的最佳方式?目前我使用的是UIGraphicsBeginImageContext()和[UIImage drawAtPoint]等。我所有的結果都是512x512的黑色方塊。我應該怎麼做?我期待着CGLayer,等等,似乎有很多選擇,但沒有一個特別容易。計算要保存到相冊的UIImage

讓我居然把我的代碼:

CGSize size = CGSizeMake(512, 512); 
UIGraphicsBeginImageContext(size); 
UIGraphicsPushContext(UIGraphicsGetCurrentContext()); 
for (int i = 0; i < 4; i++) 
{ 
    for (int j = 0; j < 4; j++) 
    { 
     UIImage *image = [self getImageAt:i:j]; 
     [image drawAtPoint:CGPointMake(i*128,j*128)]; 
    } 
} 
UIGraphicsPopContext(); 
UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageWriteToSavedPhotosAlbum(result, nil, nil, nil); 

我要指出,其實上面是什麼在我的代碼到底會發生。真正發生的是,我在調用UIGraphicsPushContext之前調用每一行,然後在一個動畫計時器中緩慢增加繪圖並繪製到上下文中。然後在完成之後,我會從UIGraphicsPopContext開始調用所有內容。

回答

0

做的正是我想做的事......

讓你GLView一樣大,你想要的總的事情。同時確保glOrtho和你的視口尺寸合適。然後,只需在任何你想要的地方繪製任何你想要的,並採取一個單一的OpenGL截圖。那麼你不需要擔心在多個OpenGL渲染過程中組合成單個UIImage,這無疑是什麼導致了我的問題。

1

哦,那你可以只保存屏幕上的觀點已經呈現在屏幕上後:

UIGraphicsBeginImageContext(myBigView.bounds.size); 
    [view drawRect:myBigView.bounds]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

你存儲回的圖像?

UIImage *myBigImage = UIGraphicsGetImageFromCurrentImageContext(); 
+0

是的,我現在把代碼放在裏面,這樣你就可以看到我做了什麼。 – Eli

+0

好吧,嘗試擺脫行:UIGraphicsPushContext(UIGraphicsGetCurrentContext()); 和UIGraphicsPopContext(); –

+0

不,我有一個OpenGL視圖,它是當前的圖形上下文,並且沒有任何其他UIView存在。我正在屏幕截圖OpenGL數據並試圖將其平鋪到一個完全不同的UIImage。這樣做的目的基本上是從一個精靈表中的多個角度獲取3D模型。 – Eli