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

时间:2010-10-12 06:48:00

标签: 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
  9. 有更快的绘制方式吗?也许使用OpenGL?

    任何建议/示例代码都将受到赞赏。

    感谢。

1 个答案:

答案 0 :(得分:1)

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

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