Поэтому у меня возникла проблема с тем, что мои изображения, как с камеры, так и из галереи, были повернуты не так, как я хотел (я хочу, чтобы они были портретными, а они были в альбомной ориентации) Некоторое время я мог поворачивать изображение, полученное с камеры, но, к сожалению, после сохранения 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)
}