Pasar imagen de una actividad otra actividad

Hay preguntas similares en SO, pero ninguna funcionó para mí.

Quiero buscar una imagen clicada en Activity1 y mostrarla en Activity2.
Estoy obteniendo la identificación de la imagen de la imagen cliqueada de esta manera:

((ImageView) v).getId() 

y pasándolo por bash a otra actividad.

En la segunda actividad, utilizo la identificación de la imagen de la siguiente manera:

 imageView.setImageResource(imgId); 

Logré el valor o id de la imagen en ambas actividades y es lo mismo.

Pero estoy siguiendo la excepción:

 android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x12/d=0x0 a=2 r=0x7f050000} 

Supongo que el problema aquí es que getId() devuelve Id de ImageView y no de su imagen fuente .
Todas estas imágenes están presentes en drawable .

Cualquier ayuda apreciada.

Hay 3 soluciones para resolver este problema.

1) Primero, convierta la imagen en una matriz de bytes y luego pase a Intent y en la siguiente actividad obtenga la matriz de bytes de Bundle y la convierte en Image (Bitmap) y configure en ImageView.

Convertir bitmap a matriz de bytes: –

 Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); 

Pasar matriz de bytes en la intención: –

 Intent intent = new Intent(this, NextActivity.class); intent.putExtra("picture", byteArray); startActivity(intent); 

Obtener matriz de bytes de paquete y convertir en imagen de bitmap: –

 Bundle extras = getIntent().getExtras(); byte[] byteArray = extras.getByteArray("picture"); Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); ImageView image = (ImageView) findViewById(R.id.imageView1); image.setImageBitmap(bmp); 

2) Primero guarde la imagen en la tarjeta SD y en la siguiente actividad configure esta imagen en ImageView.

3) Pase Bitmap a Intent y obtenga bitmap en la siguiente actividad del bundle, pero el problema es si su tamaño de Bitmap / Image es grande en ese momento en que la imagen no se carga en la siguiente actividad.

Esto no funcionará Tienes que intentarlo de esta manera.

Configure el DrawingCache de su ImageView para que sea verdadero y luego guarde el fondo como un Bitmap y páselo a través de putExtra.

 image.setDrawingCacheEnabled(true); Bitmap b=image.getDrawingCache(); Intent i = new Intent(this, nextActivity.class); i.putExtra("Bitmap", b); startActivity(i); 

Y en tu próxima actividad,

 Bitmap bitmap = (Bitmap) intent.getParcelableExtra("Bitmap"); imageView.setImageBitmap(bitmap); 

La forma perfecta de hacer esto en breve. Este es el código del archivo sender .class

 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher; Intent intent = new Intent(); Intent.setClass(.this,  

y este es el código de archivo de la clase de receptor.

 Bitmap bitmap = (Bitmap)this.getIntent().getParcelableExtra("Bitmap"); ImageView viewBitmap = (ImageView)findViewById(R.id.bitmapview); viewBitmap.setImageBitmap(bitmap); 

No es necesario comprimir Eso es