Колтин изображения низкого качества registerForActivityResult

Привет, я пытаюсь сделать снимок с помощью kotlin и registerForActivityResult, но я всегда получаю размытое изображение без качества. Я прочитал несколько сообщений, но не могу понять, как работать с моим приложением. Я использую фрагмент для вызова камеры. Какие-либо предложения? Извините за мой плохой английский, я провел целую неделю, пытаясь это работает. И ничего. заранее спасибо

частный вар imagenUri: Ури? = ноль

    val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            try {
                val intent = result.data
                intent!!.putExtra(MediaStore.EXTRA_OUTPUT, imagenUri)
                val bitMap = intent?.extras?.get("data") as Bitmap
                imagenUri= getImageUriFromBitmap(requireContext(),bitMap)
                binding.ivImagen.setImageURI(imagenUri)
                Toast.makeText(context, "la uri es: $imagenUri", Toast.LENGTH_SHORT).show()
            } catch (e: java.lang.Exception){
                Toast.makeText(context, "NO SE HA PODIDO ENCONTRAR IMAGEN", Toast.LENGTH_SHORT).show()}

        }
    }

    binding.ibTomarFoto.setOnClickListener(){
        startForResult.launch(Intent(MediaStore.ACTION_IMAGE_CAPTURE))
    }
Применение градиента к изображению с помощью CSS
Применение градиента к изображению с помощью CSS
Здравствуйте, братья и сестры, как дела? Недавно я застрял на применении градиента к изображению. Я применял это много раз, но иногда наши требования...
Получение URL-адреса изображения курса в Moodle с помощью PHP
Получение URL-адреса изображения курса в Moodle с помощью PHP
Moodle - это популярная система управления обучением с открытым исходным кодом, используемая многими учебными заведениями и организациями по всему...
0
0
201
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из документации:

public static final String ACTION_IMAGE_CAPTURE

Стандартное действие Intent, которое можно отправить, чтобы приложение камеры зафиксировало изображение и вернуло его.

Вызывающий может передать дополнительный EXTRA_OUTPUT для управления тем, куда будет записано это изображение. Если EXTRA_OUTPUT отсутствует, то изображение небольшого размера возвращается как объект Bitmap в дополнительном поле. Это полезно для приложений, которым требуется только небольшое изображение. Если EXTRA_OUTPUT присутствует, то полноразмерное изображение будет записано в значение Uri EXTRA_OUTPUT.

Поэтому вам нужно добавить дополнительный EXTRA_OUTPUT, чтобы получить полноразмерное изображение, хранящееся по указанному вами URI. В противном случае вы получите небольшое изображение в качестве полезных данных в результате Intent (эти пакеты не могут обрабатывать большие объекты).

Похоже, вы уже пытаетесь это сделать, просто добавили не туда — вам нужно добавить его к Intent, с которым вы вызываете launch, а не к результату. Это параметр конфигурации для запускаемой вами задачи!

Итак, это должно работать:

binding.ibTomarFoto.setOnClickListener(){
    startForResult.launch(
        Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(MediaStore.EXTRA_OUTPUT, imagenUri)
    )
}

А затем удалите ту же строку putExtra из кода обработчика результатов (она ничего не делает, но нет смысла ее там хранить)

Да. Спасибо, вы были абсолютно правы!!!

Monrac 01.12.2022 21:26

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