原文 Core Image Programming Guide
内容多,也有难度,没完全搞懂...,这里讲一些需要特别主要的点:
CIContext 存储了很多状态信息,创建它的代价很大,不要每次渲染时都创建。设计一种重用它的机制来提高效率,如缓存或全局变量。【注】:不仅要缓存,还要在使用之前提前创建。
评估你的APP是否需要色彩管理,除非你需要它,否则不要使用它。Does Your App Need Color Management?
使用GPU上下文渲染CIImage对象时避免使用Core Animation动画。如果你需要同时使用两者,则可以同时设置使用CPU。
-
确保图像不超过CPU和GPU的限制。
CIContext对象的图像大小限制取决于Core Image是使用CPU还是GPU。可使用 inputImageMaximumSize 和 outputImageMaximumSize 检查限制值。
尽可能使用较小的图像。
性能与输出像素数量成正比。你可以将Core Image渲染为更小的视图,纹理或帧缓存区。使用Core Graphics或Image I/O函数来裁剪或缩小比例,例如函数 CGImageCreateWithImageInRect 和 CGImageSourceCreateThumbnailAtIndexUIImageView类最适合静态图像。如果你的APP需要获得最佳性能,请使用较低级别的API。
避免CPU和GPU之间不必要的纹理传输。
在应用内容比例因子之前,渲染到与源图像大小相同的矩形。
考虑使用更简单的过滤器,可以产生类似于算法过滤器的结果。例如,CIColorCube可以产生类似于CISepiaTone的输出,并且可以更高效地完成输出。
在iOS6.0及更高版本对YUV图像的支持。摄像机像素缓冲区本来就是YUV,但大多数图像处理算法需要RBGA数据。两者之间的转换需要一些花费。Core Image支持从CVPixelBuffer对象读取YUB并应用适当的颜色转换。