在 Kotlin 中的两个活动之间传输位图

transfer bitmap between two activities in Kotlin

在 Whosebug 中使用 java 有一些答案,但我无法将其转换为 kotlin 代码。我是科特林的新手。请告诉我如何使用 Intent

将位图数据从一个 activity 传输到另一个 activity

您需要在启动 activity 时将位图作为额外参数传递给 Intent。

val intent = new Intent(this, NewActivity::class.java)
intent.putExtra("BitmapImage", bitmap)
startActivity(intent);

并将其检索为:

val bitmap = this.intent?.getParcelableExtra("BitmapImage") as Bitmap

我简单地将代码 Here 翻译成 kotlin。您应该使用 Android Studio 将 Java 代码翻译成 Kotlin。

我不建议您将 Bitmap 作为 Parcelable 传递,因为这可能会导致基于图像大小的内存和性能问题。 我建议您将位图保存在 application 的内部存储中名为 "yourimage" 的文件中,其他应用程序无法访问该文件。

保存位图的方法

fun createImageFromBitmap(bitmap: Bitmap): String? {
    var fileName: String? = "myImage" //no .png or .jpg needed
    try {
        val bytes = ByteArrayOutputStream()
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes)
        val fo: FileOutputStream = openFileOutput(fileName, Context.MODE_PRIVATE)
        fo.write(bytes.toByteArray())
        // remember close file output
        fo.close()
    } catch (e: Exception) {
        e.printStackTrace()
        fileName = null
    }
    return fileName
}

接收activity时,获取图片到Bitmap变量

val bitmap = BitmapFactory.decodeStream(
            context
                .openFileInput("yourimage")
        )