【发布时间】:2011-10-30 15:15:35
【问题描述】:
我正在开发 iOS 应用程序,用户可以在其中应用一组特定的照片过滤器。每个滤镜基本上都是一组带有特定参数的 Photoshop 动作。这些操作是:
- 级别调整
- 亮度/对比度
- 色相/饱和度
- 单层和多层覆盖
我已经在我的代码中重复了所有这些操作,使用算术表达式循环遍历图像中的所有像素。但是当我在 iPhone 4 上运行我的应用程序时,每个过滤器需要大约 3-4 秒才能应用,这对于用户来说是相当长的等待时间。图像大小为 640 x 640 像素,这是我的视图大小的 2 倍,因为它显示在 Retina 显示屏上。我发现我的主要问题是每次需要调整伽玛时都会调用 pow() C 函数的级别修改。当然,我使用的是浮点数而不是双精度数,因为 ARMv6 和 ARMv7 使用双精度数很慢。尝试启用和禁用 Thumb 并得到相同的结果。
我的应用程序中最简单的过滤器示例,但运行速度非常快(2 秒)。其他过滤器包括更多的表达式和 pow() 调用,从而使它们变慢。
https://gist.github.com/1156760
我见过一些使用 Accelerate Framework vDSP 矩阵转换来快速修改图像的解决方案。我还看到了 OpenGL ES 解决方案。我不确定他们是否能够满足我的需求。但可能只是将我的一组更改转换为一些好的卷积矩阵?
任何建议都会有所帮助。
谢谢,
安德烈。
【问题讨论】:
-
您也应该在 Apple 开发者论坛上发布这个问题。
标签: ios image-processing opengl-es matrix-multiplication accelerate-framework