径向渐变绘制性能 - OpenGL-ES 能改善吗?

7
我正在开发一个图像处理应用程序,该应用程序在从照片库加载的图像上叠加径向渐变。屏幕上有一个滑块,可以动态地增加或减小径向渐变的半径。我发现模拟器上的性能非常好,但在 iPhone 3G 或 3GS 上移动滑块时重新绘制速度要慢得多。
我目前使用 CGContextDrawRadialGradient 进行绘制。每次重新绘制时,我遵循以下步骤:
1. 创建图形上下文:UIGraphicsBeginImageContext(size); 2. 创建渐变对象:CGGradientCreateWithColorComponents 3. 将图片(从照片库加载的照片)绘制到屏幕比例上:drawInRect 4. 设置为叠加混合模式:CGContextSetBlendMode 5. 绘制渐变:CGContextDrawRadialGradient 6. 使用 UIGraphicsGetImageFromCurrentImageContext() 创建 UIimage; 7. UIGraphicsEndImageContext(); 8. 将完成的图像绘制到屏幕上:drawInRect。
是否有更快的绘制方法?也许可以使用 OpenGL?
如果您有任何建议或示例代码,将不胜感激。
谢谢。
1个回答

1
以下是一些可能会提高性能的想法(假设您正在使用渐变来添加图像的晕映):
  • 将图像绘制缓存到与视图大小相同的CGLayer中,这样可以避免每次需要绘制时进行缩放。
  • 将径向渐变的绘制缓存到另一个CGLayer中。
  • 当需要显示结果时:
    • 绘制图像层
    • 然后是覆盖混合设置
    • 接着是渐变层
    • 全部绘制到视图的绘图上下文中。
  • 用户移动滑块时,可以选择:
    • 重新绘制渐变层,然后再绘制组合。
    • 在缩放渐变层的同时重新绘制组合,并且当用户从滑块中抬起手指时重新绘制渐变层,然后再次进行组合。

太好了。让我试一试。谢谢。 - MrDB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接