Pregunta

Estoy usando un montón de CALayers, creando una imagen basada en mosaicos, no muy diferente de GoogleMaps (diferentes versiones de la misma imagen con más / menos detalles).

El código que estoy usando para hacer esto es:

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

Realmente no tengo ganas de cargar el CGImage desde un archivo usando CoreGraphics porque soy perezoso. Pero lo haré si hay un gran aumento de rendimiento! LoadImage solo maneja una cadena para obtener la ruta correcta para cargar dicha imagen, y obj es una estructura NSObject que contiene toda la información que necesito para este hilo.

¿Ayuda?

¿Fue útil?

Solución

No hay un gran aumento en el rendimiento, en todo caso es al revés. Al pasar por UIImage para cargar sus imágenes, obtendrá todos los beneficios del almacenamiento en caché que hace por usted y será una criatura muy rápida para usar con sus diversos CALayers.

Otros consejos

Acabo de probar esto y usar CoreGraphics puro para cargar la imagen en lugar de usar UIImage dio una notable mejora en la velocidad al cargar muchas imágenes de una sola vez.

" Acabo de probar esto y usar CoreGraphics puro para cargar la imagen en lugar de usar UIImage proporcionó una notable mejora de la velocidad al cargar muchas imágenes de una sola vez. "

¿Cómo evitó usar un UIImage? O más precisamente, ¿cómo cargar un archivo de imagen directamente en CoreGraphics sin pasar por un UIImage?

Una de las razones por las que NO se usa UIImage -imageNamed: para cargar imágenes es que se almacenan en el caché interno y que el caché no se borra en una situación de poca memoria.

No tengo una respuesta definitiva, pero supongo que verías un tiempo de carga más lento cuando usas UIImage de lo que verías cuando usas CGImage. Con CGImage, especifica el tipo de imagen (jpg o png) durante la creación, pero con UIImage, el tipo de objeto debe determinarse dinámicamente. Es cierto que esto es probablemente tan simple como mirar los primeros bytes del archivo de imagen, pero podría no serlo.

Una vez que la imagen esté realmente en uso, no me imagino que haya alguna diferencia entre usar el CGImage que representa internamente un UIImage en lugar de usar un CGImage que usted mismo creó. Pensaría que serían exactamente equivalentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top