ventajas vectoriales vectorial programas para mapa imagenes imagen formatos entre edicion diferencia desventajas definicion cuadro comparativo caracteristicas android image memory camera

android - vectoriales - Cómo trabajar con mapa de bits grande. Girar e insertar en la galería



programas para la edicion de imagenes vectoriales (2)

No creo que haya una mejor manera de manejar bitmaps. Podría tratar de analizar datos directamente desde un archivo como Byte [] una parte a la vez, y manipularlos en pedazos; es difícil y probablemente termines con un código muy feo.

También sugiero lo siguiente:

  • Utilice android.provider.MediaStore.Images.Media.insertImage(cr, imagePath, name, description) lugar de android.provider.MediaStore.Images.Media.insertImage(cr, bmp, name, description) esta manera no hay necesidad de llame a Bitmap bmp = BitmapFactory.decodeFile(imagePath) y no se cargará ningún mapa de bits en la memoria en ese punto.

  • A lo largo de su código, asegúrese de que no se cargue ningún mapa de bits a menos que sea necesario. Establezca mapas de bits que ya no sean necesarios para null y llamar al recolector de basura, o use bmp.recycle() .

Necesito tomar una foto con la cámara y, dependiendo del tamaño de la imagen, rotarla antes de guardarla en la galería.

Estoy usando

Intención imageCaptureIntent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE); imageCaptureIntent.putExtra (MediaStore.EXTRA_OUTPUT, uri); startActivityForResult (imageCaptureIntent, IMAGE_CAPTURE);

Para tomar la foto y guardarla en un archivo temporal.

Entonces

Bitmap bmp = BitmapFactory.decodeFile (imagePath);
String str = android.provider.MediaStore.Images.Media.insertImage (cr, bmp, nombre, descripción);

Para guardarlo

Este es el código que he tratado de usar para rotar el mapa de bits

Matrix matrix = new Matrix ();
matrix.postRotate (180);
Mapa de bits x = Bitmap.createBitmap (bmp, 0, 0, bmp.getWidth (), bmp.getHeight (), matriz, verdadero);
android.provider.MediaStore.Images.Media.insertImage (cr, x, name, description);

El problema es que recibo una OutOfMemoryException.

¿Hay una mejor manera de manejar los mapas de bits para evitar romper la memoria?

~ Gracias de antemano, saludos


Tuve el mismo problema con la rotación de mapa de bits. El problema aquí:

Bitmap bmp = BitmapFactory.decodeFile(imagePath); //this is the image you want to rotate // keeping in mind that you want to rotate the whole original image instead // of its downscaled copy you cant use BitmapFactory downscaling ratio Matrix matrix = new Matrix(); matrix.postRotate(180); Bitmap x = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); // the line above creates another bitmap so we have here 2 same sized bitmaps // even using the same var (bmp instead of x) wont change anything here // so you gonna get the OOM here

es que crea 2 mapas de bits, por lo que quieren x2 más RAM.
Mira mi pregunta y solución aquí . Yo apuesto por ImageMagick lib.