setImageURI не работает для файла содержимого

Я следую этой инструкции, чтобы написать программу для создания файла изображения как Uri

https://developer.android.com/training/camera/photobasics

Я использую это для создания файла URI

var photoURI:Uri?=null
val REQUEST_TAKE_PHOTO = 1
private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    if (takePictureIntent.resolveActivity(packageManager) != null) {
        var photoFile: File? = null
        try {
            photoFile = createImageFile()
        } catch (ex: IOException) {
        }
        // Continue only if the File was successfully created
        if (photoFile != null) {
            photoURI = FileProvider.getUriForFile(this,
                    "xxx.fileprovider",
                    photoFile)
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
            startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO)
        }
    }
}

А затем используйте это, чтобы отправить Uri к другой деятельности

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

    if(resultCode != RESULT_CANCELED){
        if (requestCode == REQUEST_TAKE_PHOTO && resultCode == Activity.RESULT_OK) {
            var i=Intent(this, NewItemActivity::class.java)
            i.putExtra("img", photoURI)
            startActivity(i)
        }
    }
}

В другом упражнении я использую get uri и установил ImageView, но изображение не отображается на экране, я проверил изображение, сохраненное в телефоне

val img = intent.extras.get("img") as Uri
iv = findViewById(R.id.img)
iv?.setImageURI(img)

Я также нашел этот метод для установки изображения из URI, но все еще не работает

Как установить содержимое файла URI в ImageView?

var p = getPath(img)
var b = lessenUriImage(p)
iv?.setImageBitmap(b)

fun getPath(uri: Uri): String {
    val projection = arrayOf(MediaStore.Images.Media.DATA)
    val cursor = managedQuery(uri, projection, null, null, null)
    val column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
    cursor.moveToFirst()
    return cursor.getString(column_index)
}

fun lessenUriImage(path: String): Bitmap {
    val options = BitmapFactory.Options()
    options.inJustDecodeBounds = true
    var bitmap = BitmapFactory.decodeFile(path, options)
    options.inJustDecodeBounds = false
    var be = (options.outHeight / 320.toFloat()).toInt()
    if (be <= 0)
        be = 1
    options.inSampleSize = be
    bitmap = BitmapFactory.decodeFile(path, options)
    val w = bitmap.width
    val h = bitmap.height
    println(w.toString() + " " + h)
    return bitmap
}

0 ответов

Другие вопросы по тегам