使用intent传递bitmap对象


/**
* 存: i.putExtra("0", bitmap);
* 取: i = getIntent();
bitmap= i.getParcelableExtra("0");
*/


在Android中,如果你想通过`Intent`传递Bitmap数据,由于Bitmap是不可序列化的,直接作为`Intent`的Extra传递会有性能和内存消耗的问题。一般推荐以下几种方法: 1. 使用`Serializable`或`Parcelable`: 将Bitmap转化为可序列化的数据结构(如`ByteArrayOutputStream`),然后将这个流作为`Intent`的Extra传递。在接收端再反序列化回Bitmap。 ```java // 序列化 Bitmap ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos); byte[] imageBytes = baos.toByteArray(); // 保存到 Intent Extra Intent intent = new Intent(context, TargetActivity.class); intent.putExtra("IMAGE_KEY", imageBytes); // 或者使用 Parcelable intent.putExtra("IMAGE_KEY", ParceledBitmapUtil.createBitmap parcelableBitmap); ``` 在目标Activity中接收并解码: ```java byte[] receivedImageBytes = getIntent().getByteExtra("IMAGE_KEY", null); Bitmap bitmap = BitmapFactory.decodeByteArray(receivedImageBytes, 0, receivedImageBytes.length); ``` 2. 使用`FileProvider`: 当需要跨应用分享时,为了满足安全性和隐私需求,可以使用Android的`FileProvider`机制,先将Bitmap写入临时文件,然后提供给其他应用。 ```java // 创建 File 对象 File tempFile = File.createTempFile("temp_bitmap_", ".jpg"); try (OutputStream outStream = new FileOutputStream(tempFile)) { bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outStream); } // 通过 FileProvider 提供文件 Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("image/jpeg"); Uri uri = FileProvider.getUriForFile(this, "com.example.provider", tempFile); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(shareIntent, "Share")); ``` 记住在AndroidManifest.xml中配置`FileProvider`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值