2011-01-20 12 views
6

Si tengo un archivo de mapa de bits grande que normalmente generaría una excepción de "Memoria insuficiente", ¿cómo puedo cargarlo como teselas? p.ej. Tengo una imagen de 10,000x10,000, quiero dividirla en una cuadrícula de 10x10 con mosaicos de 1,000x1,000 píxeles.Cómo cargar mosaicos desde un mapa de bits grande en Android?

He visto la función Bitmap.createBitmap(sourceBitmap, x, y, width, height) pero requiere mi gran imagen como fuente de entrada.

¿Cómo puedo obtener un mosaico de mi imagen de entrada, sin cargar completamente la imagen de entrada?

+0

¿Por qué no puedes dividir una imagen grande en 16 diferentes? –

+0

Porque solo estoy cargando una imagen desde el teléfono del usuario. –

Respuesta

0

Si tiene mucha suerte, puede encontrar una biblioteca que pueda cargar trozos de una imagen desde el almacenamiento en lugar de cargarla por completo. Depende del formato de la imagen y de las bibliotecas disponibles para leerlo. Además, la biblioteca probablemente se escribirá en C, por lo que deberá portarla a Java o usar el NDK.

Sería mucho mejor romper la imagen en las teselas antes de que se coloque en el teléfono.

Si ninguna de estas opciones funciona para usted, creo que no tiene suerte.

+0

Hola, gracias por eso, lamentablemente no tendré ningún control sobre las imágenes que se usan con la aplicación. –

0

Si la imagen se almacena como un mapa de bits comprimido, entonces es prácticamente imposible calcular en una región particular de la imagen está ubicada en el archivo. Para encontrar una región en particular, debe decodificar línea por línea, descartando los resultados hasta que llegue a la fila y. A continuación, continúa la decodificación para filas de altura, tirando los píxeles a la izquierda de su coordenada X ya la derecha de X + ancho ... muy lento si está desplazándose por la parte inferior de un mapa de bits grande.

Al leer entre líneas, parece que BitmapRegionDecoder() mencionado anteriormente lo hace en el fondo si 'isShareable' es verdadero. De lo contrario, parece que puede descomprimir la imagen y almacenar la copia sin comprimir. Con 1 byte por píxel, tomará 100MB para mantener su mapa de bits de 10,000x10,000.

Cuestiones relacionadas