繁体   English   中英

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

[英]Radial gradient draw performance - Can OpenGL-ES improve?

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

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

我目前正在使用CGContextDrawRadialGradient进行绘图。 我每次重绘的步骤都是:

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

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

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

谢谢。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM