2010-10-12 4 views
2

J'utilise CGBitmapContextRef pour une grande image modifiable. Que je dessine ses parties dans UIView.drawRect. Cela fonctionne bien sur iPhone 3GS - 17FPS. Mais sur iPhone 4, l'appel de la méthode subj est très lent - et le FPS total est de 1,5! Profileur dit que: sur 3GS invoque CGSBlendBGRA8888toRGBA8888 qui prend 23% du temps total. sur 4G, le même code appelle argb32_sample_RGBA32/argb32_image_mark qui prend ~ 90%. Hou la la!CGContextDrawImage très lent sur iPhone 4

L'espace colorimétrique pour l'image bitmap est CGColorSpaceCreateDeviceRGB. Et la création d'un drapeau est kCGImageAlphaPremultipliedLast.

Que puis-je faire pour de meilleures performances sur iPhone 4? Aucune suggestion ?

Répondre

8

réglage Essayez:

CGContextSetInterpolationQuality(myBitmapContext, kCGInterpolationNone); 

sur votre bitmap. kCGInterpolationLow est une autre option.

Une autre technique pouvant vous aider est d'ajouter un calayer à votre vue et de définir le contenu du CALayer sur votre bitmap, au lieu de dessiner l'image bitmap dans le drawRect de la vue.

+0

Merci. J'ai essayé tes techniques. 1) kCGInterpolationNone - mauvaise qualité pour moi quand mis à l'échelle. kCGInterpolationLow - bonne qualité et FPS mieux quelques-uns (~ 5-10%). 2) CALayer.contents ne veut pas manger CGBitmapContext, juste CGImage. Mais pour ce cas je fais ensuite:/* ne doit pas ref pour context-image quand écrire dans */[.layer.contents = nil]; [changer les pixels du contexte]; [.layer.contents = CGBitmapContextCreateImage (pCtx)]; et que le code sur 3GS nous donne 8FPS (était de 17) et sur 4G 12FPS (était de 1,5) – user396550

+0

... et effacer .layer.contents et que de configurer un clignotement parfois – user396550

+0

J'ai réécrit le code pour utiliser OpenGLES pour dessiner et utiliser l'interface utilisateur native commandes pour zoomer et défiler. Je divise mon Big Image modifiable aux textures N * K dont la taille est de 256x256. parfois mettre à jour certains d'entre eux. FPS maintenant: 3G - 27, 3GS - 55, 4G - 60, iPad - 53 – user396550