【问题标题】:Radial gradient draw performance - Can OpenGL-ES improve?径向渐变绘制性能 - OpenGL-ES 可以改进吗?
【发布时间】:2010-10-12 06:47:59
【问题描述】:

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

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

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

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

有没有更快的绘图方法?也许使用 OpenGL?

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

谢谢。

【问题讨论】:

    标签: iphone opengl-es ios4 ios


    【解决方案1】:

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

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

    【讨论】:

    • 优秀。让我试一试。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多