para muchas hacer gratis fotos como collages collage apps app aplicacion iphone objective-c image uiscrollview tiles

iphone - muchas - como hacer un collage de fotos



¿Es posible crear un mosaico de imágenes en UIScrollView sin tener que crear manualmente todas las teselas? (5)

Encontré esto que puede ser de ayuda: http://www.mikelin.ca/blog/2010/06/iphone-splitting-image-into-tiles-for-faster-loading-with-imagemagick/

Simplemente lo ejecuta en la Terminal como un script de shell en su Mac.

En el código de muestra de iPhone " PhotoScroller " de WWDC 2010, muestran cómo hacer una muy buena imitación de la aplicación Fotos con desplazamiento, zoom y paginación de imágenes. También colocan las imágenes en mosaico para mostrar cómo mostrar imágenes de alta resolución y mantener un buen rendimiento.

El mosaico se implementa en el código de muestra al tomar imágenes pre escaladas y cortadas para diferentes resoluciones y colocarlas en la cuadrícula que compone toda la imagen.

Mi pregunta es: ¿hay alguna forma de crear mosaicos de imágenes sin tener que pasar manualmente todas sus fotos y crear "mosaicos"? ¿Cómo es que la aplicación Fotos puede mostrar imágenes grandes sobre la marcha?

Editar Aquí está el código de la respuesta de Deepa a continuación:

- (UIImage *)tileForScale:(float)scale row:(int)row col:(int)col size:(CGSize)tileSize image:(UIImage *)inImage { CGRect subRect = CGRectMake(col*tileSize.width, row * tileSize.height, tileSize.width, tileSize.height); CGImageRef tiledImage = CGImageCreateWithImageInRect([inImage CGImage], subRect); UIImage *tileImage = [UIImage imageWithCGImage:tiledImage]; return tileImage; }


Lo siento, Jonah, pero creo que no puedes hacer lo que quieres.

He estado implementando una aplicación de cómic usando el mismo ejemplo como referencia y tenía la misma duda. Finalmente, me di cuenta de que, incluso si pudieras cargar la imagen y cortarla en mosaicos la primera vez que la usas, no deberías. Hay dos razones para eso:

  1. Usted hace el mosaico para ahorrar tiempo y ser más receptivo. La carga y el mosaico llevan tiempo para una imagen grande.
  2. La razón anterior es particularmente importante la primera vez que el usuario ejecuta la aplicación.

Si estas dos razones no tienen sentido para ti, y aún quieres hacerlo, usaría Quartz para crear las fichas. La función CGImage CGImageCreateWithImageInRect sería mi punto de partida.


Muchos formatos de imagen admiten decodificación basada en regiones. En lugar de cargar toda la imagen en la memoria, descomprimir todo y descartar todo excepto la región de interés (ROI), puede cargar y decodificar solo el ROI, a pedido. En su mayor parte, esto elimina la necesidad de pregenerar y guardar mosaicos de imágenes. Nunca he trabajado con ImageMagick pero me sorprendería si no pudiera hacerlo. (Lo he hecho usando la API de Java Advanced Imaging (JAI), que no te ayudará en el iPhone ...)

He jugado con el ejemplo de PhotoScroller y la forma en que funciona con los mosaicos pregenerados es solo para demostrar la idea detrás de CATiledLayer, y hacer un proyecto autónomo. Es fácil reemplazar la estrategia de carga de mosaicos de imágenes: simplemente reescriba el método TilingView tileForScale:row:col: para devolver un mosaico UIImage de alguna otra fuente, ya sea Quartz o ImageMagick o lo que sea.


Aquí va la pieza de código para la generación de imágenes en mosaico:

En el código fuente de PhotoScroller, reemplace tileForScale: row: col: con lo siguiente:

inImage - Imagen que quieres crear fichas

- (UIImage *)tileForScale: (float)scale row: (int)row column: (int)col size: (CGSize)tileSize image: (UIImage*)inImage { CGRect subRect = CGRectMake(col*tileSize.width, row * tileSize.height, tileSize.width, tileSize.height); CGImageRef tiledImage = CGImageCreateWithImageInRect([inImage CGImage], subRect); UIImage *tileImage = [UIImage imageWithCGImage: tiledImage]; return tileImage; }

Saludos, Deepa


La respuesta de Deepa anterior cargará toda la imagen en la memoria como un UIImage (la variable de entrada en su función), lo que frustra el propósito del mosaico.