Tengo una aplicación muy simple con un ImageView y un botón. El primer recurso Disponibles cargado por mi ImageView se especifica con el "android: src" etiqueta en el diseño de XML, sin embargo, en tiempo de ejecución quiero cambio de la imagen mostrada por ella. Para hacerlo, comienzo una Actividad para el resultado para elegir una imagen de la tarjeta SD (intento enviado a MediaStore.Images.Media.EXTERNAL_CONTENT_URI). Sin embargo, cuando se selecciona la imagen, trato de actualizar el ImageView con el URI de la imagen elegida, pero me sale el mensaje "java.lang.OutOfMemoryError: tamaño de mapa de bits supera el presupuesto VM"ImageView causa OutOfMemoryError
I'am intentar cargar imágenes tomadas con la cámara (el tamaño de las fotos es alrededor de 1.1M) de mi HTC-Hero pero sin éxito, parece funcionar solo con imágenes que son menos de 500KB. Sin embargo, necesito cargar las fotos tomadas con la cámara. ¿Cómo puedo resolver esto? qué estoy haciendo mal. Me parece que el código es muy simple y debería funcionar.
public void onClick(View v){
Intent selectImageIntent=new Intent(Intent.ACTION_PICK ,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(selectImageIntent,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==Activity.RESULT_OK){
Uri selectedImageUri = data.getData();
Log.i(TAG,"chosen image: "+selectedImageUri.toString());
ImageView imageView = (ImageView) this.findViewById(R.id.ImageView01);
imageView.setImageURI(selectedImageUri);//here I get the OutOfMemoryError
imageView.invalidate();
}else{
//canceled
}
}
p.s. eso es lo único que debe hacer la aplicación, no crearé otros objetos, así que me gustaría señalar que no estoy usando el espacio de almacenamiento para otras cosas además de mostrar la imagen.
Este método lo salvará si está utilizando un FragmentStatePagerAdapter con ImageViews ya que al reciclar el mapa de bits se producirá un error al volver a inflar la vista. –