Приведенный выше ответ очень тщательный, но я обнаружил, что для каждого случая мне нужно было сделать немного больше, особенно если вы имеете дело с изображениями из других источников, таких как Галерея или Google Фото. Вот мой метод DetermineOrientation. У меня есть служебный класс, где он находится, поэтому мне нужно передать Activity, чтобы использовать managedQuery (кстати, он устарел, поэтому используйте его осторожно). Причина, по которой я должен использовать два метода, заключается в том, что в зависимости от источника изображения ExifInterface не будет работать. Например, если я делаю фото с камеры, Exif работает нормально. Однако, если я также выбираю изображения из Галереи или Google Диска, Exif не работает и всегда возвращает 0. Надеюсь, это кому-нибудь поможет.
от вопрос уже есть ответ здесь:
Почему изображение, снятое с помощью камеры, поворачивается на некоторых устройствах на Android? 17 ответовЯ работаю над приложением в Android, которое использует камеру для съемки фотографий. Для запуска камеры я используюintent
ACTION_IMAGE_CAPTURE
нравится:
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File image=new File(Environment.getExternalStorageDirectory(),"PhotoContest.jpg");
camera.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(image));
imageUri=Uri.fromFile(image);
startActivityForResult(camera,1);
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1:
if (resultCode == Activity.RESULT_OK) {
selectedImage = imageUri;
getContentResolver().notifyChange(selectedImage, null);
image= (ImageView) findViewById(R.id.imageview);
ContentResolver cr = getContentResolver();
Bitmap bitmap;
try {
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
image.setImageBitmap(bitmap);
Toast.makeText(this, selectedImage.toString(),
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
.show();
Log.e("Camera", e.toString());
}
}
else
if(resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(EditPhoto.this, "Picture could not be taken.", Toast.LENGTH_SHORT).show();
}
}
}
Проблема в том, что все сделанные фотографии повернуты на 90 градусов по горизонтали.
Я также поместил это в мой файл манифеста:
<activity android:name=".EditPhoto">
android:screenOrientation="portrait"
</activity>
Но все равно безрезультатно! Так может кто-нибудь мне помочь ???