2010-10-12 94 views
2

我使用CGBitmapContextRef來處理大的可變圖像。 比我在UIView.drawRect中繪製一個部分。 這在iPhone 3GS-17FPS上效果很好。 但在iPhone 4調用subj方法非常慢 - 總FPS爲1.5!CGContextDrawImage在iPhone 4上非常緩慢

profiler說:在3GS上調用CGSBlendBGRA8888toRGBA8888佔總時間的23%。在4G相同的代碼調用argb32_sample_RGBA32/argb32_image_mark需要~90%。哇!

位圖的顏色空間是CGColorSpaceCreateDeviceRGB。並且創建標誌是kCGImageAlphaPremultipliedLast。

如何在iPhone 4上獲得更好的性能?有什麼建議麼 ?

回答

8

嘗試設置:

CGContextSetInterpolationQuality(myBitmapContext, kCGInterpolationNone); 

你的位圖。 kCGInterpolationLow是另一種選擇。

另一種可能幫助的技術是將CALayer添加到視圖中,並將CALayer的內容設置爲位圖,而不是在視圖的drawRect內繪製位圖圖像。

+0

謝謝。我嘗試了你的技巧。 1)kCGInterpolationNone - 縮放時我的質量很差。 kCGInterpolationLow - 質量好,FPS好一些(〜5-10%)。 2)CALayer.contents不想吃CGBitmapContext,只是CGImage。但是對於那種情況,我接下來要做的是:/ *寫入*/[.layer.contents = nil]時,必須不要引用上下文映像; [改變上下文的像素]; [.layer.contents = CGBitmapContextCreateImage(pCtx)];並且3GS上的代碼爲我們提供了8FPS(是17)和4G 12FPS(是1.5) – user396550 2010-10-13 10:09:11

+0

...並且清除了.layer.contents,並且有時設置了一個閃爍 – user396550 2010-10-13 13:25:02

+0

我重寫了使用OpenGLES進行繪製和使用原生UI-控制縮放和滾動。 我分割大小爲256x256的N * K紋理的大型可變圖像。有時更新一些。 FPS現在:3G - 27,3GS - 55,4G - 60,iPad - 53 – user396550 2010-11-02 11:37:26