解决安卓手机竖向拍照后,图像横屏展示的问题。

安卓手机调用系统的相机拍照之后,本来应该是根据你手机的拍照方向,预览照片应该是根据你手持手机的方向不一样而不一样。但是现在就有一个问题,华为手机是正常的,但是像Vivo和小米手机跳用系统的相机拍照之后,显示的预览图是横屏的。
首先试着解决Activity的显示方式只能是竖屏:

android:screenOrientation="portrait"

发现加上之后华为是可以正常显示的,但是小米和vivo手机还是不行。
Android 设置禁止横屏失效解决方法
加上代码申请竖屏之后,解决了vivo手机的问题,可以正常显示。但是小米系列手机不行!
后来发现小米手机的拍照之后,图片默认是横向显示的,也就是手机其实还是正常的竖屏,但是照片被旋转了90度显示。
下面是小米的适配代码:

hideTakePhotoLayout();
                BitmapFactory.Options options = new BitmapFactory.Options();
                Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length,options);
                //在这里判断显示图片的旋转角度,然后正确旋转之后显示
                Matrix matrix = new Matrix();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
               //compress方法是把一个位图写到一个OutputStream中,参数一是位图对象,二是格式,三是压缩的质量,四是输出流
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
               //输出流转成输入流
                InputStream inputimage = new ByteArrayInputStream(baos.toByteArray());
                matrix.postRotate(getPhotoRotation(inputimage));
              
                Log.e(">>>>>>>>>>>>>","getPhotoRotation(inputimage):"+getPhotoRotation(inputimage));
                if ("xiaomi".equalsIgnoreCase(Build.MANUFACTURER)) {
                      matrix.postRotate(90); //小米手机需要旋转90度正常显示
                }

                bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
                vShowPhoto.setImageBitmap(bitmap);
                bases64 = EncryptHelper.getBase64(bytes);
                if (vloadingLay != null)
                    vloadingLay.setVisibility(View.VISIBLE);
                if(vloading != null)
                    vloading.setText("翻译中...");
                startTranslate(bases64);

需要获取图片旋转的角度的方法:

private int getPhotoRotation(InputStream inputStream){
        try{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                ExifInterface exifInterface = new ExifInterface(inputStream);
                int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
                switch (orientation){
                    case  ExifInterface.ORIENTATION_ROTATE_90:
                        return 90;
                    case  ExifInterface.ORIENTATION_ROTATE_180:
                        return 180;
                    case  ExifInterface.ORIENTATION_ROTATE_270:
                        return 270;
                   default:
                       return 0;
                }
            }
        }catch (Exception e){
          Log.e(">>>>>>>>>>>>","获取图片旋转的角度报错:"+e.getMessage());
        }
        return 0;
    }

但是这个代码还是根据了手机的不同型号进行了适配。
解决方案二:

把手机的拍照的方向全部设置成横屏,那么拍的照片也就是横屏的照片。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值