我正在合成两个(静态)图像,每秒几次。这段代码在3G上运行起来非常不稳定,而且在iPhone4上运行起来非常慢。 TimeProfiler显示对UIImage drawAtPoint的调用最终会调用一些非常昂贵的东西,称为“argb_sample_RGBA21”。从未在3G上调用此例程。我是否可以对静态图像执行一次字节顺序转换,从而节省了这种字节顺序转换?
+ (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 :(得分:0)
Core Graphics本质上很慢,因为它只在CPU上运行而不利用图形硬件。使用CISourceOverCompositing可选地与同一页面中的CICategoryCompositeOperation结合使用可以显着提升性能,但前提是您的目标是iOS 5或更高版本。
这是一个很好的核心形象介绍: http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5