2010-04-16 165 views
1

即時嘗試將兩個圖像合併爲一個圖像。不幸的是,爲了響應用戶滑動UISlider,這必須很快完成。我可以將這兩個圖像組合成一個單一的圖像沒有問題。但我這樣做的方式非常慢。滑塊堅持和跳躍相當令人沮喪。我不認爲我可以將代碼扔到後臺線程中,因爲我會很快耗盡線程。我還沒有真正厭倦。下面是我的代碼。關於如何加速它的任何想法都會有所幫助。更快的方式來繪製圖像

UIGraphicsBeginImageContext(CGSizeMake(bodyImage.theImage.image.size.width * 1.2, bodyImage.theImage.image.size.height * 1.2)); 

[bodyImage.theImage.image drawInRect: 
    CGRectMake(-2 + ((bodyImage.theImage.image.size.width * 1.2) - bodyImage.theImage.image.size.width)/2, 
    kHeadAdjust, 
    bodyImage.theImage.image.size.width * bodyImage.currentScale, 
    bodyImage.theImage.image.size.height * bodyImage.currentScale)]; 

if(isCustHead) 
{ 
    [Head.theImage.image drawInRect: CGRectMake((bodyImage.theImage.image.size.width * 1.2 - headWidth)/2 - 11, 
      0, 
      headWidth * 0.92, 
      headWidth * (Head.theImage.image.size.height/Head.theImage.image.size.width) * 0.92)]; 
} 
else 
{ 
    [Head.theImage.image drawInRect: CGRectMake((bodyImage.theImage.image.size.width * 1.2 - (headWidth * defaultHeadAdjust))/2 - 10, 
      0, 
      (headWidth * defaultHeadAdjust * 0.92), 
      (headWidth * defaultHeadAdjust) * (Head.theImage.image.size.height/Head.theImage.image.size.width) * 0.92)]; 
} 

drawSurface.theImage.image = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 
+1

更有幫助的標籤會幫助...這是iPhone API,對吧? – Kena 2010-04-16 19:33:50

+0

@Kena,功能名稱的快速搜索結果顯示它是iphone,所以我相應地批准了 – Earlz 2010-04-16 19:40:32

回答

2

我沒有很多時間來回答,但你會想要做的一件事就是將你的繪圖到的NSOperation和使用performOnMainThread:完成時通知。

每當你的滑塊移動時,告訴NSOperationQueue取消它的操作。這樣,如果用戶滑動的速度非常快,那麼您不會僅僅是爲了立即將其扔掉。

當執行完成後,將圖像存儲在您製作的NSOperation子類中,然後將其傳遞給主線程,您可以在其中將圖像應用於圖層內容。

無論你的代碼速度有多快,這都會對你的性能有所幫助,特別是對於不知情的用戶。

對於圖像渲染,您可能需要考慮製作一個自定義的離屏位圖並渲染到其中。另外,嘗試緩存很多數學,特別是如果變化不大。

你做的越少,就會越快。

也刪除任何NSLog的,你可能有,這些真的很慢的事情。我只在配置中設置了一個標誌時才使用NSLog的宏(所以我有一個調試+日誌配置)

2

這實際上應該是非常快的。如果您的圖像真的很大,您可能需要緩存它們的屏幕分辨率版本以用於渲染循環。

但實際上,在一般情況下,您無需自己做任何繪圖。爲兩個圖像創建單獨的CALayer,將它們添加到視圖中,並讓CoreGraphics處理該圖形。

+0

我認爲這是該問題的主要解決方案,讓操作系統通過CoreGraphics或直接通過OpenGl – 2010-04-16 20:26:04

0

不特定於iPhone。只是一個想法:

如何alpha混合 2個 圖像?

OR

顯示的2個圖像一個在 其他(上面的一個爲50% 透明)的頂部。