2

我正在使用一大堆 CALayers,创建与 GoogleMaps 不同的基于图块的图像(具有更多/更少细节的同一图像的不同版本)。

我用来执行此操作的代码是:

UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
obj.layerToAddTo.contents = [image CGImage];
[CATransaction commit];

我真的不想使用 CoreGraphics 从文件中加载 CGImage,因为我很懒。但如果有很大的性能提升,我会的!LoadImage 只是破坏一个字符串以获得加载所述图像的正确路径,而 obj 是一个 NSObject 结构,它包含我需要的所有信息。

帮助?

4

5 回答 5

3

性能并没有很大的提升——如果有的话,情况恰恰相反。通过 UIImage 来加载你的图像,你将获得它为你做的缓存的所有好处,它将是一个非常快速的生物,可以与你的各种 CALayer 一起使用。

于 2008-10-14T21:31:05.473 回答
1

我刚刚尝试过,使用纯 CoreGraphics 加载图像而不是使用 UIImage 在一次加载许多图像时显着提高了速度。

于 2008-10-19T13:15:12.663 回答
-1

“我刚刚尝试过,使用纯 CoreGraphics 加载图像而不是使用 UIImage 在一次加载许多图像时显着提高了速度。”

你是如何避免使用 UIImage 的?或者更准确地说,如何在不通过 UIImage 的情况下将图像文件直接加载到 CoreGraphics 中?

于 2009-05-21T19:04:30.360 回答
-1

不使用加载图像的一个原因UIImage -imageNamed:是它们存储在内部缓存中,并且在内存不足的情况下不会清除缓存。

于 2010-09-28T18:13:31.537 回答
-3

我没有明确的答案,但我猜你在使用 UIImage 时会看到比使用 CGImage 时更慢的加载时间。使用 CGImage,您在创建过程中指定图像类型(jpg 或 png),但使用 UIImage,需要动态确定对象类型。诚然,这可能就像查看图像文件的前几个字节一样简单,但可能并非如此。

一旦图像实际被使用,我不会想象使用内部表示 UIImage 的 CGImage 与使用您自己创建的 CGImage 之间会有任何区别。我认为它们将完全等效。

于 2008-10-16T15:53:04.953 回答