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量级的,就不能正常工作了。