2010-11-20 4 views
1

Я собираю два (статических) изображения, несколько раз в секунду. Этот код довольно хорошо работает на 3G, и очень медленно на iPhone4. TimeProfiler показывает, что вызов UIImage drawAtPoint: заканчивается вызовом чего-то очень дорогого, называемого «argb_sample_RGBA21». Эта процедура никогда не вызывается в 3G. Есть ли какое-то преобразование байтового порядка, которое я мог бы выполнять на статических изображениях один раз, тем самым сохраняя это преобразование байтового порядка?Улучшение производительности CoreGraphics на iPhone4

+ (UIImage *) createInterpolatedImageBetween: (UIImage *) imageA 
            andImage: (UIImage *) imageB 
            forValue: (float) fractionalValue { 

     UIGraphicsBeginImageContextWithOptions(CGSizeMake(imageA.size.width, imageA.size.height), YES, 0.0); 

     [imageA drawAtPoint: CGPointMake(0,0)]; 

     [imageB drawAtPoint: CGPointMake(0,0) 
       blendMode: kCGBlendModeNormal 
        alpha: fractionalValue]; 


     UIImage *answer = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     return answer; 

}

+0

в iPhone4 изображений может быть гораздо больше больше, чем 3GS, я думаю, что это причина. Убедитесь, что вы обрабатываете изображение нужного размера;) – nacho4d

ответ

0

Core Graphics является по своей сути медленно, потому что он работает исключительно на CPU и не воспользоваться графическим оборудованием. Использование CISourceOverCompositing в сочетании с CICategoryCompositeOperation с той же страницы даст вам значительное увеличение производительности, но только если вы ориентируетесь на iOS 5 или выше.

Вот хорошее ядро ​​изображение интро: http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5

Смежные вопросы