径向渐变绘制性能 - OpenGL-ES可以改进吗?

MrD*_*rDB 7 iphone opengl-es ios4 ios

我正在开发一个图像处理应用程序,它覆盖了从照片库加载的图像上的径向渐变.

在屏幕上我有一个滑块来动态地/减少径向渐变的半径.我发现在模拟器上的性能还不错,但在iPhone 3G或3GS上,移动滑块时重绘速度慢得多.

我目前正在CGContextDrawRadialGradient用于绘画.我每次重绘的步骤都是:

  1. 创建图形上下文:UIGraphicsBeginImageContext(size);
  2. 创建渐变对象: CGGradientCreateWithColorComponents
  3. 将图像(从照片库加载的照片)绘制到屏幕比例: drawInRect
  4. 设置为叠加混合模式: CGContextSetBlendMode
  5. 绘制渐变: CGContextDrawRadialGradient
  6. 使用UIGraphicsGetImageFromCurrentImageContext()创建UIimage;
  7. UIGraphicsEndImageContext();
  8. 将完成的图像绘制到屏幕:drawInRect.

是否有更快的绘制方式?也许使用OpenGL?

任何建议/示例代码将不胜感激.

谢谢.

小智 1

以下是一些可能提高性能的想法
(假设您使用渐变向图像添加渐晕):

  • 将图像绘制缓存CGLayer与视图大小相同的图像中,这样可以避免每次需要绘制它时进行缩放。
  • 将径向渐变的绘制缓存到另一个CGLayer.
  • 当你需要显示结果时:
    • 绘制图像层
    • 接下来是叠加混合设置
    • 接下来是渐变层
    • 全部进入视图的绘图上下文。
  • 用户移动滑块时,您可以:
    • 重新绘制渐变层,然后重新绘制合成。
    • 在缩放渐变层的同时重新绘制合成,当用户将手指从滑块上移开时,重新绘制渐变层,然后再次合成。