我正在使用一大堆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-struct,它包含了我需要的所有信息。

帮助?

有帮助吗?

解决方案

没有太大的性能提升 - 如果有的话,那就相反了。通过UIImage加载你的图像,你将获得它为你做的缓存的所有好处,它将是一个非常快速的小动物与你的各种CALayers一起使用。

其他提示

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

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

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

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

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

一旦图像实际使用,我不会想到使用内部表示UIImage的CGImage与使用自己创建的CGImage之间存在任何差异。我认为它们完全相同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top