lunes, 11 de febrero de 2013

¿Por qué algunas aplicaciones de fotografía en iOS no soportan la alta resolución?

Resolución imágenes iPhone



Mientras preparaba mi artículo sobre Hipstamatic, estuve investigando sobre Instagram, Hipstamatic, y en general sobre fotografía analógica en el mundo digital en el que estamos. Me topé con un post muy interesante de John Balestrieri, desarrollador de aplicaciones como Popsicolor para iOS.



En su post se exponen, desde el punto de vista del desarrollador, las razones de por qué muchas aplicaciones no soportan resolución nativa o alta resolución. Ciertamente aplicaciones que usamos cada día como por ejemplo Instagram acaba por subir las fotografías de 8 megapíxeles de nuestro iPhone a 500×500 píxeles. ¿A qué se debe? ¿Por qué hacemos un collage con una aplicación muy bonita y finalmente nos queda una foto que no tiene suficiente resolución para imprimir?



También incluye una pequeña definición de los términos principales en su post:




  • Resolución nativa: máxima resolución de píxeles soportada por la cámara.


  • Resolución completa: tamaño de la imagen que se ha importado en una aplicación.


  • Alta resolución: término inexacto para referirse a resolución nativa o completa.


  • Baja resolución: no quiere decir menos que resolución nativa, pero se refiere a una resolución que el usuario consideraría de una calidad inaceptable


  • Menos de resolución nativa: pues eso, menos de resolución nativa.




A continuación, expongo algunas de las razones, técnicas y no tan técnicas, de por qué algunas aplicaciones no soportan altas resoluciones (según el post de John Balestrieri):




  • Ignorancia: el desarrollador no sabe que la alta resolución es importante para los usuarios.


  • Experiencia de desarrollador: para la mayoría de desarrolladores es más fácil no implementar métodos que saquen resultados de alta resolución.


  • Limitación de la cámara: Algunos modos de disparo de iPhone y iPad tienen limitaciones de resolución. También pasa con las previsualizaciones de filtros en tiempo real, como tenía Instagram en sus versiones anteriores. El iPhone permite capturar una imagen en alta resolución mientras se generan las previsualizaciones, pero siempre habrá un retraso respecto a lo que vemos de lo que hemos capturado. Para tomas de acción puede ser un problema. El desarrollador debe elegir entre resolución y tiempo.


  • Memoria: Para la aplicación Cámara de nuestro iPhone es relativamente sencillo mover como mucho un par de imágenes, por ejemplo la captura en modo HDR: dos tomas que se funden en una tercera y guarda la copia. Otras aplicaciones más complejas tienen que manejar más copias, mientras lo mantienen todo en la memoria para que puedas aplicar filtros o bordes con relativa rapidez.


  • CPU: Un punto clave. De momento nuestros iPhone y iPad no usan el mismo procesador que un ordenador de sobremesa. Parte de los efectos y la fluidez de iOS se debe a la GPU, el procesador de gráficos, pero la mayoría de aplicaciones de fotos no lo usan o no pueden usarlo.


  • Ancho de banda: es normal que una aplicación de un dispositivo portátil que depende de internet móvil tenga en cuenta el tamaño de las imágenes para acortar el tiempo de subida.




Cámara app de iOS 6




  • Escalabilidad: Algunos algoritmos gráficos se ejecutan en la CPU en un tiempo razonable cuando se trabaja con imágenes con menos resolución que la nativa. Si se escala el código a resoluciones mayores, es muy fácil que esta se vuelva muy lenta y no satisfaga a los usuarios. Un ejemplo podría ser el filtro de desenfoque radial de Instagram.




    Se usa algo como una “ventana de pixeles”, por lo que un filtro con un radio 3 se traduce a una ventana de 5×5, que se debe aplicar a cada pixel de la imagen. Una imagen de 16×16 tiene 256 pixeles en total y se aplica un filtro de radio 3, se tendrán que procesar 5x5x256 = 6.400 pixeles.




    Si se aumenta de tamaño la imagen, también aumentamos el numero total de pixeles que necesitamos procesar. Si estábamos trabajando con una imagen 16×16 y ahora queremos trabajar con una de 32×32, no es una imagen el doble de grande como la mayoría de gente piensa. En total el número de pixeles en una imagen de 16×16 es de 256, pero la de 32×32 tiene 1024, ¡cuatro veces más!




    Si volvemos al cálculo anterior, si queremos procesar esta imagen, el filtro será ahora de 11×11 porque la imagen es más grande, por lo que el número total de pixeles a procesar es de 11x11x1024 = 123.904. Eso son casi 20 veces el número de pixeles original. ¡Y eso que en principio solo teníamos una imagen el doble de grande!




    Debido a estos aumentos de pixeles, muchos desarrolladores prefieren limitar la máxima resolución que una aplicación puede tratar. Como hemos dicho, aumentar la resolución podría hacer que la aplicación tardase demasiado a procesar una imagen y en consecuencia llegar a frustrar a los usuarios que la usan.


  • Programar para la CPU es menos complejo que para la GPU: Como sabemos, el iPhone y el iPad llevan potentes chips gráficos –el procesador que mueve fluidamente la interfaz y los juegos 3D– pero es mucho más complejo escribir código para la GPU que para la CPU. Por esta razón muchos desarrolladores prefieren escribir en la CPU y poner limitaciones a lo que pueden procesar.


  • El concepto de resolución nativa es irrelevante: Para las aplicaciones fotográficas que convierten imágenes en formas geométricas como círculos o triángulos, la imagen original solo sirve como punto de partida. En la mayoría de casos esta es reducida a no más de 512×512, y transformada a un formato diferente. Aquí la resolución soportada la marca el desarrollador dependiendo de como quiera de grande la salida.


  • La aplicación es vieja: Una aplicación escrita hace tres años puede que aún tenga una calidad aceptable, pero ahora hay mejores iPhone, mejores cámaras, y gradualmente la aplicación solo soportará imágenes de baja resolución. Lo más probable es que la aplicación no haya recibido ninguna actualización o la forma en que está hecha no permita soportar altas resoluciones fácilmente.


  • La aplicación debe soportar varios dispositivos: A veces el desarrollador debe simplificar la aplicación para que varios dispositivos puedan usarla, por ejemplo, si debe ser compatible con el hardware del iPhone 3G.


  • El soporte para la alta resolución consume muchos más recursos: Añadir soporte para procesar imágenes en alta resolución, a parte de consumir más recursos de proceso del dispositivo como hemos dicho antes, comporta más tiempo de desarrollo y de test de la aplicación. Es decisión de cada desarrollador determinar si vale la pena sacar una aplicación en un tiempo y que tenga una calidad aceptable, y prometer altar resolución para futuras actualizaciones.


  • El valor de la alta resolución: Muchos desarrolladores ven en la alta resolución un sector de usuarios objetivo, pudiendo ofrecer esta característica como una “Compra a través de la app” o una versión Pro de esta.




Estas son todas las razones por las que un desarrollador decide no implementar la alta resolución, y decantarse por una resolución razonable. Como dice John, “como creemos que la gente va a querer usar la imagen”. Creo que el problema es que a veces uno no acierta el uso que se la va a dar al final y no lo puede saber hasta que la aplicación llega al App Store. ¿Tienes en cuenta la resolución a la que salen las fotos de tus aplicaciones favoritas? Podéis leer el post original en inglés aquí.


No hay comentarios:

Publicar un comentario