Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 径向渐变绘制性能-OpenGL ES可以改进吗?_Iphone_Opengl Es_Ios4_Ios - Fatal编程技术网

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

Iphone 径向渐变绘制性能-OpenGL ES可以改进吗?,iphone,opengl-es,ios4,ios,Iphone,Opengl Es,Ios4,Ios,我正在开发一个图像处理应用程序,它将径向渐变覆盖在从照片库加载的图像上 在屏幕上,我有一个滑块,可以动态调整/减小径向渐变的半径。我发现模拟器的性能还不错,但在iPhone3G或3GS上,移动滑块时重新绘制要慢得多 我目前正在使用CGContextDrawRadialGradient进行绘图。每次重画我都会遵循以下步骤: 创建图形上下文:UIGraphicsBeginImageContext(大小) 创建渐变对象:CGGradientCreateWithColorComponents 将图像(从

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

在屏幕上,我有一个滑块,可以动态调整/减小径向渐变的半径。我发现模拟器的性能还不错,但在iPhone3G或3GS上,移动滑块时重新绘制要慢得多

我目前正在使用
CGContextDrawRadialGradient
进行绘图。每次重画我都会遵循以下步骤:

  • 创建图形上下文:
    UIGraphicsBeginImageContext(大小)
  • 创建渐变对象:
    CGGradientCreateWithColorComponents
  • 将图像(从照片库加载的照片)绘制到屏幕比例:
    drawInRect
  • 设置为叠加混合模式:
    CGContextSetBlendMode
  • 绘制渐变:
    CGContextDrawRadialGradient
  • 使用UIGraphicsGetImageFromCurrentImageContext()创建UIimage
  • UIGraphicsEndImageContext()
  • 将完成的图像绘制到屏幕:
    drawInRect
  • 有没有更快的画法?也许使用OpenGL

    如有任何建议/示例代码,将不胜感激


    谢谢。

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

    • 将图像绘图缓存在与视图大小相同的
      CGLayer
      中,这样可以避免每次需要绘制图像时进行缩放
    • 将径向渐变的图形缓存到另一个
      CGLayer
    • 当您需要显示结果时
      • 绘制图像层
      • 然后是叠加混合设置
      • 然后是梯度层
      • 所有内容都将显示在视图的图形上下文中
    • 当用户移动滑块时,您可以:
      • 重新绘制渐变层然后绘制构图
      • 在缩放渐变层时重新绘制构图,当使用者将手指从滑块上提起时,重新绘制渐变层,然后再次合成

    非常好。让我试一试。谢谢