我正在开发一个图像处理应用程序,它将径向渐变叠加在从照片库加载的图像上。
在屏幕上,我有一个滑块可以动态地增大/减小径向渐变的半径。我发现模拟器上的性能很好,但在 iPhone 3G 或 3GS 上就很糟糕了much移动滑块时重绘速度较慢。
我目前正在使用CGContextDrawRadialGradient
用于绘图。每次重画我遵循的步骤:
- 创建图形上下文:
UIGraphicsBeginImageContext(size)
;
- 创建渐变对象:
CGGradientCreateWithColorComponents
- 将图像(从照片库加载的照片)绘制到屏幕的比例:
drawInRect
- 设置为叠加混合模式:
CGContextSetBlendMode
- 绘制渐变:
CGContextDrawRadialGradient
- 使用 UIGraphicsGetImageFromCurrentImageContext() 创建 UIimage;
UIGraphicsEndImageContext();
- 将完成的图像绘制到屏幕上:
drawInRect
.
有没有更快的画图方法?也许使用 OpenGL?
任何建议/示例代码将不胜感激。
Thanks.
以下是一些可能提高性能的想法
(假设您使用渐变向图像添加渐晕):
-
缓存您的图像绘图 in a
CGLayer
与视图具有相同的大小,这可以避免缩放每次需要绘制它时。
-
缓存径向渐变的绘制进入另一个
CGLayer
.
- when you need to show the result:
- 绘制图像层
- 接下来是叠加混合设置
- 接下来是渐变层
- 全部进入视图的绘图上下文。
- when the user moves the slider, you can either:
-
重画渐变层然后是构图。
-
重新绘制构图缩放渐变层时,当用户将手指从滑块上移开时,重新绘制渐变层,然后再次合成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)