Изображение с камеры намеренно поворачивается, но не сохраняется при повороте - PullRequest
0 голосов
/ 18 апреля 2020

Поэтому у меня возникла проблема с тем, что мои изображения, как с камеры, так и из галереи, были повернуты не так, как я хотел (я хочу, чтобы они были портретными, а они были в альбомной ориентации) Некоторое время я мог поворачивать изображение, полученное с камеры, но, к сожалению, после сохранения URI повернутого растрового изображения (переменная называется cachedLocalImageUri, она всегда возвращается в повернутое состояние, что означает, что я что-то упустил в цепочке .

Вот мои фрагменты кода -

private fun handleDataFromCamera() {
        getSharedPreferences(Constants.profileSharedPrefs, Context.MODE_PRIVATE).edit().putString(Constants.profileImageUri, cameraFileProviderUri.toString()).apply()
        val bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, cameraFileProviderUri)
        val rotatedBitmap = ImageUtils.rotateImage(bitmap, cameraFileProviderUri!!)
        setPic(profileImage, rotatedBitmap!!)
        didUserUploadProfilePicture = true
    }

private fun setPic(imageView: ImageView, bitmap: Bitmap) {
        // bitmap values
        val bitmapWidth = bitmap.width
        val bitmapHeight = bitmap.height
        // Imageview value
        val imageViewHeight = imageView.height
        val imageViewWidth = imageView.width
        // scaling values
        val scaleWidth = bitmapWidth?.coerceAtMost(imageViewWidth)
        val scaleHeight = bitmapHeight?.coerceAtMost(imageViewHeight)
        val scaledBitmap = Bitmap.createScaledBitmap(bitmap, scaleWidth, scaleHeight, true)
        try {
            val filename = Constants.profileImagePrefix
            val file = getExternalFilesDir(null)?.absolutePath
            val destination = File(file, filename)
            val fileOutputStream = FileOutputStream(destination)
            scaledBitmap.compress(Bitmap.CompressFormat.PNG, 25, fileOutputStream)
            profileImage.setImageBitmap(scaledBitmap)
            cachedLocalImageUri = Uri.fromFile(destination)
            fileOutputStream.close()
            didUserUploadProfilePicture = true
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }

 fun rotateImage(bitmap: Bitmap, fileUri: Uri): Bitmap? {
        val matrix = Matrix()
        try {
            App.context?.contentResolver?.openInputStream(fileUri).use { inputStream ->
                val exif = ExifInterface(inputStream!!)
                when (exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)) {
                    ExifInterface.ORIENTATION_ROTATE_90 -> {
                        matrix.setRotate(90f)
                    }

                    ExifInterface.ORIENTATION_ROTATE_180 -> {
                        matrix.setRotate(180f)
                    }

                    ExifInterface.ORIENTATION_ROTATE_270 -> {
                        matrix.setRotate(270f)
                    }
                }
            }
        } catch (e: IOException) {
            e.printStackTrace()
        }
        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
    }

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