Подборщик фотографий. Портрет превращается в пейзаж
Как выбрать изображение из галереи (SD-карта) для моего приложения?
Я реализовал второй ответ (с понижающей дискретизацией). Когда я выбираю изображение в портретном режиме, оно будет отображаться в альбомном режиме.. Кто-нибудь знает, почему это происходит? И как это исправить? Заранее спасибо!
P. s. Извините, что я сделал новую тему из этого, но плакат защитил его тему от новичков, таких как я:)
1 ответ:
Вы должны получить exif вращение рисунка, как это и организовать your bitmap соответственно
public static int getExifRotation(String imgPath) { try { ExifInterface exif = new ExifInterface(imgPath); String rotationAmount = exif.getAttribute(ExifInterface.TAG_ORIENTATION); if (!TextUtils.isEmpty(rotationAmount)) { int rotationParam = Integer.parseInt(rotationAmount); switch (rotationParam) { case ExifInterface.ORIENTATION_NORMAL: return 0; case ExifInterface.ORIENTATION_ROTATE_90: return 90; case ExifInterface.ORIENTATION_ROTATE_180: return 180; case ExifInterface.ORIENTATION_ROTATE_270: return 270; default: return 0; } } else { return 0; } } catch (Exception ex) { return 0; } }
Получить путь изображения
public String getPath(Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }
Тонко сделать матрицу и использовать конструктор растровых изображений, который использует матрицу
Matrix matrix = new Matrix(); matrix.preRotate(90); // or matrix.postRotate(90);
Так что внутри вашего onActivityResult у вас должно быть что-то вроде этого
Uri selectedImageUri = data.getData(); selectedImagePath = getPath(selectedImageUri); orientation = getExifRotation(selectedImagePath); Matrix matrix = new Matrix(); matrix.postRotate(90); if(orientation == 90){ bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);}
Убедитесь, что вы сначала перепроверяете свой образ, так как он имеет его в своем ответе, а затем сделайте это