我正在开发iOS应用程序,用户可以应用一定的照片滤镜。每个滤镜基本上都是一组Photoshop操作,具有特定的参数。这些操作包括:
- 色阶调整
- 亮度/对比度
- 色相/饱和度
- 单个和多个叠加
我已经在我的代码中使用算术表达式重复了所有这些操作,并循环处理图像中的所有像素。但是当我在iPhone 4上运行我的应用时,每个滤镜需要大约3-4秒的时间来应用,这对于用户来说等待的时间太长了。图片尺寸为640 x 640 px,这是我的视图大小的@2x,因为它在Retina显示器上显示。我发现我的主要问题是级别修改,每次需要调整伽玛时都会调用pow() C函数。当然,我使用的是浮点数而不是双精度,因为ARMv6和ARMv7与双精度一起使用速度很慢。尝试启用和禁用Thumb,但结果相同。
这是我应用程序中最简单滤镜的示例,运行非常快(2秒)。其他滤镜包含更多的表达式和pow()调用,因此使它们变慢。
https://gist.github.com/1156760
我看到有些解决方案使用加速框架vDSP矩阵变换进行快速图像修改。我也看到了OpenGL ES解决方案。我不确定它们是否能满足我的需要。但可能只是将我的一组更改转换为某个好的卷积矩阵的问题?
任何建议都将非常有用。
谢谢,
Andrey。