outofmemoryerror outofmemory example density clase bitmaps android bitmapfactory

outofmemory - Android: decodeFile siempre devuelve nulo para el archivo en el almacenamiento interno



clase bitmap android (6)

¿Podrías probar fileList ()? Eso

devuelve una matriz de cadenas que nombran los archivos privados asociados con el paquete de aplicaciones de este contexto.

Tengo un archivo guardado localmente en el almacenamiento privado de la aplicación. He verificado que existe, sin embargo, siempre que llamo a BitmapFactory.decodeFile, siempre devuelve un valor nulo.

Si guardo el archivo como un recurso y uso ImageView setImageResource, siempre aparece bien.

¿Cuál es el problema?

Aquí está el fragmento:

filename = "test.png"; if (doesFileExist(filename)) Bitmap bMap = BitmapFactory.decodeFile(filename);

También he intentado:

Bitmap bMap = BitmapFactory.decodeFile(getFilesDir().getPath() + filename);


En lugar de usar BitmapFactory.decodeFile, intente usar InputStream:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { super.onActivityResult(requestCode, resultCode, imageReturnedIntent); if(resultCode == RESULT_OK){ Uri selectedImage = imageReturnedIntent.getData(); InputStream imageStream = getContentResolver().openInputStream(selectedImage); Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);



Gente, los archivos almacenados en el recurso de la aplicación deben ser referenciados de una manera especial. Por ejemplo, si el archivo se encuentra en activos y se denomina "myfile.png", se debe hacer referencia a él como:

String uriString="file:///android_asset/myfile.png"; Uri uri=Uri.parse(uriString);


Para mí estaba obteniendo una imagen de la URL localmente guardada, algo así como "file: /// storage / emulated / 0 / ...." (He usado el complemento Phonegap para capturar la imagen. El complemento me estaba dando la ruta de la imagen, que necesito uso en código nativo)

Aquí está el fragmento de código que funcionó para mí.

String captured_image_info = "file:///storage/emulated/0/Android/data/com.testapp/cache/1493809796526.jpg" Uri uri=Uri.parse(captured_image_info); largeLog("uri", "" + uri); InputStream imageStream = getContentResolver().openInputStream(uri); Bitmap bm = BitmapFactory.decodeStream(imageStream); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object byte[] decodedBytes = baos.toByteArray(); Bitmap img_captured_image = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);


BitmapFactory.decodeFile espera una ruta de archivo sin el esquema. Es decir, sin el file:// al principio.

Si está manejando un Uri, no solo .toString() , sino que llame a .getPath() en él, y páselo al método.