Android传递Bitmap的几种简单方式
一,通过Intent的Bundle。
比如有两个activity,A,B,从A进入B。先在A中将Bitmap写进去:
- Resources res=getResources();
- Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.ic_launcher);
-
- Bundle b = new Bundle();
- b.putParcelable("bitmap", bmp);
-
- Intent intent = new Intent(this, MainActivity2.class);
- intent.putExtras(b);
- startActivity(intent);
然后在B中解析、接收Bitmap:
- Intent intent=getIntent();
- Bundle b=intent.getExtras();
- Bitmap bmp=(Bitmap) b.getParcelable("bitmap");
此种传递方式的缺陷:只能传递相对较小适中大小的Bitmap,如果Bitmap大小尺寸过大就会引起代码崩溃。
二,把Bitmap写进字节流。
比如有两个activity,A,B,从A进入B。先在A中将Bitmap写进字节流传递出去:
- Resources res=getResources();
- Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.ic_launcher);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
- byte[] bytes=baos.toByteArray();
-
- Bundle b = new Bundle();
- b.putByteArray("bitmap", bytes);
-
- Intent intent = new Intent(this, MainActivity2.class);
- intent.putExtras(b);
- startActivity(intent);
然后在B中接收Bitmap的字节流并恢复出来:
- Intent intent=getIntent();
- Bundle b=intent.getExtras();
- byte[] bytes=b.getByteArray("bitmap");
-
- Bitmap bmp=BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
此种传递方式的缺陷:缺陷同第一种方式相同。
小结:
以上两种方式均适用于适中、较小图片,如果图片过大如MB量级的,就不能正常工作了。