Android传递Bitmap的两种简单方式及其缺陷

时间:2023-01-25 07:52:08

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