Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how do you pass images (bitmaps) between android activities using bundles?

Suppose I have an activity to select an image from the gallery, and retrieve it as a BitMap, just like the example: here

Now, I want to pass this BitMap to be used in an ImageView for another activity. I am aware bundles can be passed between activities, but how would I store this BitMap into the bundle?

or is there another approach I should take?

like image 634
damonkashu Avatar asked Dec 04 '10 05:12

damonkashu


People also ask

Can we pass image in bundle?

A Bitmap implements Parcelable, so you can put it in an extra. Likewise, a bundle has putParcelable . If you want to pass it inbetween activities, I would store it in a file.


2 Answers

I would highly recommend a different approach.

It's possible if you REALLY want to do it, but it costs a lot of memory and is also slow. It might not work if you have an older phone and a big bitmap. You could just pass it as an extra, for example intent.putExtra("data", bitmap). A Bitmap implements Parcelable, so you can put it in an extra. Likewise, a bundle has putParcelable.

If you want to pass it inbetween activities, I would store it in a file. That's more efficient, and less work for you. You can create private files in your data folder using MODE_PRIVATE that are not accessible to any other app.

like image 60
EboMike Avatar answered Sep 30 '22 15:09

EboMike


If you pass it as a Parcelable, you're bound to get a JAVA BINDER FAILURE error. So, the solution is this: If the bitmap is small, like, say, a thumbnail, pass it as a byte array and build the bitmap for display in the next activity. For instance:

in your calling activity...

Intent i = new Intent(this, NextActivity.class); Bitmap b; // your bitmap ByteArrayOutputStream bs = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.PNG, 50, bs); i.putExtra("byteArray", bs.toByteArray()); startActivity(i); 

...and in your receiving activity

if(getIntent().hasExtra("byteArray")) {     ImageView previewThumbnail = new ImageView(this);     Bitmap b = BitmapFactory.decodeByteArray(         getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length);             previewThumbnail.setImageBitmap(b); } 
like image 22
Harlo Holmes Avatar answered Sep 30 '22 16:09

Harlo Holmes