You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中通过Intent.putExtra()传递Bitmap并加载到ImageView?

解决Kotlin中通过Intent传递Bitmap到另一个Activity的问题

核心问题修正

你当前的错误在于接收数据时误用了getStringExtra(),但传递的是Bitmap类型而非字符串。Bitmap实现了Parcelable接口,可直接通过Intent的Parcelable相关方法传递和获取。

正确实现步骤

1. 发送方(MainActivity)代码(现有代码无需修改,补充启动逻辑)

// 在onActivityResult中获取相机缩略图
val thumbnail: Bitmap = data!!.extras!!.get("data") as Bitmap
// 创建Intent并传递Bitmap
val screenSwitch2 = Intent(this@MainActivity, mlscreen::class.java)
screenSwitch2.putExtra("bitmap", thumbnail)
startActivity(screenSwitch2) // 补充启动Activity的代码

2. 接收方(mlscreen)代码

替换错误的getStringExtra(),改用getParcelableExtra()获取Bitmap:

// 获取传递过来的Bitmap
val thumbnail = intent.getParcelableExtra<Bitmap>("bitmap")
// 判空后设置到ImageView
thumbnail?.let {
    yourImageView.setImageBitmap(it)
}

额外注意事项

  • 直接传递Bitmap仅适合小尺寸图片(比如相机缩略图),如果是大尺寸图片,可能触发TransactionTooLargeException(Intent传递数据有大小限制)。
  • 若需传递大图,建议将Bitmap保存为本地文件,再通过Intent传递文件路径:
    // 发送方保存Bitmap到本地缓存
    val tempFile = File(externalCacheDir, "temp_photo.jpg")
    FileOutputStream(tempFile).use { outputStream ->
        thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)
    }
    // 传递文件路径
    screenSwitch2.putExtra("image_path", tempFile.absolutePath)
    
    // 接收方读取图片
    val imagePath = intent.getStringExtra("image_path")
    imagePath?.let {
        val bitmap = BitmapFactory.decodeFile(it)
        yourImageView.setImageBitmap(bitmap)
    }
    

内容的提问来源于stack exchange,提问作者Sohum S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:30:47