为了账号安全,请及时绑定邮箱和手机立即绑定

为什么使用摄像头拍摄的图像会在Android上的某些设备上旋转?

为什么使用摄像头拍摄的图像会在Android上的某些设备上旋转?

PIPIONE 2019-06-05 14:50:55
为什么使用摄像头拍摄的图像会在Android上的某些设备上旋转?我正在捕捉一个图像并将其设置为图像视图。public void captureImage() {     Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");     File filePhoto = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");     imageUri = Uri.fromFile(filePhoto);     MyApplicationGlobal.imageUri = imageUri.getPath();     intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);     startActivityForResult(intentCamera, TAKE_PICTURE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode,      Intent intentFromCamera) {     super.onActivityResult(requestCode, resultCode, intentFromCamera);     if (resultCode == RESULT_OK && requestCode == TAKE_PICTURE) {         if (intentFromCamera != null) {             Bundle extras = intentFromCamera.getExtras();             if (extras.containsKey("data")) {                 bitmap = (Bitmap) extras.get("data");             }             else {                 bitmap = getBitmapFromUri();             }         }         else {             bitmap = getBitmapFromUri();         }         // imageView.setImageBitmap(bitmap);         imageView.setImageURI(imageUri);     }     else {     }}public Bitmap getBitmapFromUri() {     getContentResolver().notifyChange(imageUri, null);     ContentResolver cr = getContentResolver();     Bitmap bitmap;     try {         bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, imageUri);         return bitmap;     }     catch (Exception e) {         e.printStackTrace();         return null;     }}但问题是,一些设备上的图像每次旋转时都会出现。例如,在三星设备上,它工作得很好,但是在一个索尼Xperia图像旋转90度东芝兴盛(药片)180度。
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

大多数手机相机都是景观,这意味着如果你在肖像中拍摄照片,所产生的照片将被旋转90度。在这种情况下,相机软件应该填充EXIF数据的方向,照片应该在其中查看。

请注意,下面的解决方案取决于安装Exif数据的相机软件/设备制造商,因此它在大多数情况下都能工作,但它不是100%可靠的解决方案。

ExifInterface ei = new ExifInterface(photoPath);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;}

这是rotateImage方法:

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);}


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 1026 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信