#android #android-camera
#Android #android-камера
Вопрос:
Вот мой код
takePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "MyPicture");
values.put(MediaStore.Images.Media.DESCRIPTION, "Photo taken on " System.currentTimeMillis());
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, 0);
}
});
@onActivityResult
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
tempUri = getImageUri(getApplicationContext(), bitmap);
s = getRealPathFromURI(tempUri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
image.setImageBitmap(bitmap);
Но это неправильная ориентация.
Я думаю, что изображение поворачивается при использовании EXTRA_OUTPUT
. Но я не знаю, как это исправить. Используется ExifInterface
. Однако ориентация всегда равна 0. Таким образом, путь зашел в тупик.
Прикрепленный файл
Камера
Вывод
Ответ №1:
Используйте эти 2 метода, чтобы получить растровое изображение в правильном повороте, вам просто нужно вызвать getPictureBitmap()
метод:
public Bitmap getPictureBitmap(String yourPathToPicture) throws IOException {
Bitmap bitmap = BitmapFactory.decodeFile(currentPhotoPath);
ExifInterface ei = new ExifInterface(yourPathToPicture);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
Bitmap rotatedBitmap = null;
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotatedBitmap = rotateImage(bitmap, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotatedBitmap = rotateImage(bitmap, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotatedBitmap = rotateImage(bitmap, 270);
break;
case ExifInterface.ORIENTATION_NORMAL:
default:
rotatedBitmap = bitmap;
}
return rotatedBitmap;
}
public static Bitmap rotateImage(Bitmap source, float angle) {
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
matrix, true);
}
Комментарии:
1. Добро пожаловать, у меня только что была такая же проблема в моем последнем проекте!