Mostrar enormes imágenes en Android

Tengo la intención de mostrar imágenes muy grandes en Android.

Mi primera solución – para suministrarlos como pdf – falla porque no todas las computadoras portátiles tienen un visor de pdf preinstalado, y no quiero exigir a los usuarios que instalen uno.

Así que tengo un png ahora (ancho = 3998px altura = 2827px) que quiero mostrar. He descargado esta imagen para probar cómo se mostraría la galería. Fue muy doloroso. Parece que la galería hace que esta imagen sólo una vez, y si me Zoom in, no puedo leer el texto en absoluto.

Así que escribí un testActivity que simplemente tiene un ImageView anidado en un LinearLayout. Puse la imagen en el dibujable y la fijo como imagen-fuente de ImageView. Unforunately la aplicación se bloquea inmediatamente, debido a un "

ERROR/AndroidRuntime(8906): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget" 

No esperaba que una sola imagen pudiera ser demasiado grande para VM's memory . He jugado un poco, establecer el tamaño de ImageViews a 3998 & 2827px , poner la imagen a sdCard y leerlo manualmente con un fileInputStream .
A mi gran sorpresa ahora muestra mi imagen, pero si doy vuelta a mi Nexus S horizontal consigo el mismo OutOfMemoryError como antes.

¿Puede alguien me señalar la principal diferencia entre recibir un mapa de bits a través de un FileInputStream o para establecerlo como fuente ImageView's .

También no puedo desplazarme cómodamente con dos scrollViews padre

Estoy buscando una solución simple para mostrar ONE large image a la vez con la posibilidad de scroll horizontal and vertical mientras que capaz de acercar y alejar.

Aquí hay una muestra de la imagen que quiero mostrar Introduzca aquí la descripción de la imagen

Sé que es un viejo post, pero pasé mucho tiempo en este problema, así que aquí está mi solución.

Quería mostrar una imagen 2000 × 3000, pero me quedé sin memoria o la imagen era demasiado grande para ser mostrada.

Para empezar, obtengo las dimensiones de la imagen:

 o = new BitmapFactory.Options(); o.inJustDecodeBounds=true; pictures = BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

Entonces lo corté en cuatro partes y las mostré con cuatro ImageViews. Intenté cargar la imagen completa y cortarla en cuatro (usando BitmapFactory.create(bitmap,int,int,int,int) ) pero salí de la memoria otra vez.

Así que decidí usar algunos BitMapRegionDecoder:

 for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { ImageView iv = new ImageView(this); InputStream istream = null; try { istream = this.getContentResolver().openInputStream(Uri.fromFile(f)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } BitmapRegionDecoder decoder = null; try { decoder = BitmapRegionDecoder.newInstance(istream, false); } catch (IOException e) { e.printStackTrace(); } int nw = (j*width/k); int nh = (i*height/k); Bitmap bMap = decoder.decodeRegion(new Rect(nw,nh, (nw+width/k),(nh+height/k)), null); iv.setImageBitmap(bMap); } } 

Esto funcionó.

Sé que es una vieja pregunta pero utilicé TileView para hacer exactamente esto:

https://github.com/moagrius/TileView

Intente utilizar éste: https://github.com/davemorrissey/subsampling-scale-image-view

Una vista de imagen personalizada para Android, diseñada para galerías de fotos y que muestra imágenes enormes (por ejemplo, mapas y planos de construcción) sin OutOfMemoryErrors. Incluye pinch to zoom, panning, rotación y soporte de animación, y permite una extensión fácil para que pueda agregar sus propias superposiciones y detección de eventos táctiles.

Puede utilizar esta fuente "fácil de integrar" de la aplicación WorldMap:

https://github.com/johnnylambada/WorldMap

Esto utiliza una imagen enorme de un mapa del mundo, y utiliza caché para mostrar un mapa.

Para integerate, acabo de copiar todos los archivos java (5 i guess) y utiliza el surfaceView en mi archivo de diseño. Luego pasé por el pequeño método OnCreate () de ImageViewerActivity.java y usé el código en mi actividad (con ligera alteración, dependiendo de mi uso personal).

Esta publicación es una buena demostración para ampliar una imagen mediante gestos multitáctiles. Utiliza Matrix para hacer zoom, así como panoramizar una imagen.

Esta respuesta debe resolverlo para u Extraño problema de memoria durante la carga de una imagen a un objeto Bitmap

Para manejar la escala, etc, y usar la resolución completa, puede usar MapView de OSM (mapa de calle abierta) y proporcionarle sus azulejos (en lugar del mapa). Compruebe esto: http://www.haakseth.com/?p=30

Tenemos que seguir los siguientes pasos para eliminar la excepción de memoria perdida al cargar imágenes enormes:

  1. Read Bitmap Dimensions and Type 2. Load a Scaled down version into memory 

La Guía para desarrolladores de Android define cómo lograrlos. aqui esta el link

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html#load-bitmap

  • Android: cambiar LayoutParams de vista agregado por WindowManager
  • Grupo de escucha de clics en la vista de lista ampliable de android
  • Consiga enfocado View from ViewPager
  • ¿Cómo utilizo las clases de "superficie" de Android?
  • ¿Mostrar la vista por encima de la barra de estado?
  • android webview Relacionados
  • ¿Es posible cambiar el navegador / motor predeterminado para la vista Web de Android?
  • Recepción de la barra de estado oculta / entrada de un evento de actividad de pantalla completa en un servicio
  • La lista expandible no se está expandiendo
  • Refresh ExpandableListView al agregar datos: keep state
  • A veces listView.getChildAt (int index) devuelve NULL (Android)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.