提高透明图像绘制性能

时间:2011-08-04 13:33:59

标签: ios performance uiimageview transparency

我的目标 我想通过使用动画期间图像之外的背景不会改变的事实来提高动画中透明图像的绘制性能。

上下文 我需要构建一个100幅图像(约5秒)的动画。我无法使用UIImageView的startAnimating功能,因为100张图片太大而无法放入内存中。所以我决定使用计时器并直接更改UIImageView中的图像。问题是对于透明图像,绘图太慢(对于具有透明度的全屏图像为5 FPS;对于没有透明度的图像为22 FPS)。

当动画启动时,我知道在动画完成之前,我的图像之外的像素不会改变。

问题 有没有办法通过使用动画期间图像之外的背景不会改变这一事实来提高透明图像的绘图性能?

请注意,在我启动动画之前,图像之外的背景可能会发生变化,因此我无法将背景直接放在我的图像中。

2 个答案:

答案 0 :(得分:2)

不幸的是,您的选择会有所限制。因为您不能提前知道背景 - 也就是说,在动画运行之前 - 然后在动画运行时需要在背景上合成透明图像。我认为无法解决这个问题。

您应该能够使用-animationImages的{​​{1}}功能,因为它不应加载并将所有图像保存在内存中,而是在需要显示时加载它们。你尝试过这种方法,如果是的话,结果是什么?

我能想到的唯一另一个选择是下拉到使用OpenGL纹理,可能使用PVRTC压缩纹理,使用更少的内存,这样你可以保持更多的内存加载,避免因动画时的图像解压缩而减速正在运行。

答案 1 :(得分:0)

您是否尝试过禁用UIImageView上的透明度并将其背景设置为[UIColor clearColor]?这应该可以提高UIView的合成性能。

您还可以查看CGLayers而不是使用UIImageView并在后台线程中随时读取图像。这可能是UIImageView对animationImages所做的,但你应该能够以这种方式节省内存,因为你可以足够快地加载图像。

您受I / O或图形性能的约束吗?您可以尝试使用NSData在内存中加载3个图像,并在屏幕上解压缩/显示它们,而不会碰到磁盘以了解这是否是您的瓶颈。您还可以尝试使用解压缩的内存中图像来了解解压缩步骤是否是限制因素(您使用PNG而不是JPEG吗?)。