本文介绍了Android Studio(Kotlin)将给定图像保存在Gallery 2020中的给定路径中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Android Studio中,我想将BitMap保存到android设备库中的特定文件夹,例如/test_pictures作为图像.

In Android Studio I want to save a BitMap to a specific folder in the galery of the android device for example /test_pictures as an image.

我在互联网上发现的简单方法似乎都已被弃用,因此使用这些方法不是一个好习惯.

The easy ways I found on the internet seem to be all deprecated, so it is not good practice to use those.

有人在Kotlin上有一个简单的示例代码来实现这一目标吗?

Does anyone have an easy example code on how to achieve this in Kotlin?

推荐答案

Kotlin位图扩展如下:

Kotlin bitmap extension like this:

fun Bitmap.saveImage(context: Context): Uri? {
if (android.os.Build.VERSION.SDK_INT >= 29) {
    val values = ContentValues()
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1000)
    values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis())
    values.put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/test_pictures")
    values.put(MediaStore.Images.Media.IS_PENDING, true)
    values.put(MediaStore.Images.Media.DISPLAY_NAME, "img_${SystemClock.uptimeMillis()}")

    val uri: Uri? =
        context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
    if (uri != null) {
        saveImageToStream(this, context.contentResolver.openOutputStream(uri))
        values.put(MediaStore.Images.Media.IS_PENDING, false)
        context.contentResolver.update(uri, values, null, null)
        return uri
    }
} else {
    val directory =
        File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).toString() + separator + "test_pictures")
    if (!directory.exists()) {
        directory.mkdirs()
    }
    val fileName =  "img_${SystemClock.uptimeMillis()}"+ ".jpeg"
    val file = File(directory, fileName)
    saveImageToStream(this, FileOutputStream(file))
    if (file.absolutePath != null) {
        val values = contentValues()
        values.put(MediaStore.Images.Media.DATA, file.absolutePath)
        // .DATA is deprecated in API 29
        context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
        return Uri.fromFile(file)
    }
}
return null
}


fun saveImageToStream(bitmap: Bitmap, outputStream: OutputStream?) {
if (outputStream != null) {
    try {
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)
        outputStream.close()
    } catch (e: Exception) {
        e.printStackTrace()
    }
}
}

这篇关于Android Studio(Kotlin)将给定图像保存在Gallery 2020中的给定路径中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 06:43