2012-09-17 11 views
5

Estoy desarrollando una aplicación que necesita utilizar imágenes que tengan una resolución superior a (2000 x 2000) para fines de claridad de texto.¿Cuál es la mejor manera de manejar imágenes de muy alta resolución?

Tengo una imagen de fondo, sobre la que necesito mostrar imágenes de superposición con la misma resolución. El número de superposiciones es variable, de 2 a 30.

Al cargar la imagen con UIImage, se necesitan 4 bytes por cada píxel, de modo que si una imagen tiene una resolución de 3000x3000, se necesitarán hasta 34 MB de memoria, 15 MB para 2000 x 2000.

Ahí es donde el problema se levanta, la aplicación se bloquea después de cargar imágenes en 4-5 3GS, y 11-13 imágenes en el iPhone 4.

las superposiciones deben ser colocados exactamente sobre la imagen de fondo. Son como los que tenemos en las superposiciones de tráfico de Google Maps. Esto no excluye el mosaico, pero hace que la tarea sea relativamente compleja.

¿Cómo debo manejar este problema?

+1

Este problema puede resolverse mediante el mosaico o reconsiderar la lógica comercial. – JehandadK

+0

Sí, quiero saber si hay una manera en que pueda manejar este problema sin mosaico. –

+0

Supongo que está utilizando MapKit considerando que menciona tanto Overlays como Google Maps. MKOverlayView * es * una vista en mosaico y, como tal, probablemente no deba descartar el mosaico. El marco MK llamará a 'drawMapRect: zoomScale: inContext:' en su vista de superposición y, como práctica recomendada, debe * solo * representar el contenido de acuerdo con el rectificador provisto. –

Respuesta

0

Definitivamente, no se puede cargar todo el conjunto de imágenes en la memoria a la vez. Debe cargar únicamente la parte visible de los datos de la imagen y debe descargar la parte invisible lo más rápido posible.

Si quiere resolver esto en el nivel QuartzCore, existe la clase CATiledLayer solo para este propósito.

de Apple Referencia: https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CATiledLayer_class/Introduction/Introduction.html

de Apple Código de ejemplo: https://developer.apple.com/library/mac/#samplecode/CALayerEssentials/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008029

Información adicional: http://red-glasses.com/index.php/tutorials/catiledlayer-how-to-use-it-how-it-works-what-it-does/

Para utilizar esta capa, es necesario dividir las imágenes de origen en muchos azulejos. Y suminístrelos cuando la capa lo necesite. (Método drawLayer:inContext:). Se llamará al método en el hilo no principal, por lo que la interfaz del usuario no se bloqueará. No olvides liberar la imagen del mosaico invisible para ahorrar memoria.

Además, puede implementar esto con código OpenGL de bajo nivel con la carga de recursos dinámicos utilizando el hilo de fondo. En este caso, puede usar PVRTC lossy, compresión en memoria que puede ahorrar mucho uso de memoria de video, pero es realmente doloroso y requiere mucho tiempo. Recomiendo usar de CATiledLayer. Esto es suficiente para la mayoría de los casos.

Cuestiones relacionadas