Android Studio (Kotlin) сохранить заданное изображение по заданному пути в галерее 2020 - PullRequest
0 голосов
/ 01 мая 2020

В Android Studio. Я хочу сохранить BitMap в определенной папке c в галерее устройства android, например / test_pictures, в качестве изображения.

Простые способы, которые я нашел в inte rnet, кажутся устаревшими, поэтому не рекомендуется их использовать.

У кого-нибудь есть простой пример кода, как этого добиться в Kotlin?

1 Ответ

0 голосов
/ 01 мая 2020

Kotlin расширение растрового изображения, например:

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()
    }
}
}

val imageUri = YourBitmap.saveImage (applicationContext)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...