此人已下架
2018-05-24 12:20
采纳率: 33.3%
浏览 3.0k

关于 Android 自定义相机照片旋转问题

最近在做一款 Android 端的自定义相机,发现有些手机(如三星、LG,大部分手机是正确的)拍出的照片方向并不对,
且通过 Exif 信息读取到的 旋转角度是 0,也就是说没有办法通过旋转角度去纠正所拍摄的照片。

另外,我在有问题的相机上装了其他类型的自定义相机,发现有些相机是可以拍摄出正确角度的照片的。

所以想问下大佬有什么合适解决方案,谢过!

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

8条回答 默认 最新

  • doushuai1020 2018-05-25 03:01
    最佳回答

    Android相机一般默认应该是横拍为正。所以竖拍的是出的照片方向都是旋转90度的。需要在拍照完成后的监听里面,获取bitmap后进行旋转。
    /**
    * 旋转图片,使图片保持正确的方向。
    *
    * @param bitmap 原始图片
    * @param degrees 原始图片的角度
    * @return Bitmap 旋转后的图片
    */
    private Bitmap rotateBitmap(Bitmap bitmap, int degrees) {
    if (degrees == 0 || null == bitmap) {
    return bitmap;
    }
    Matrix matrix = new Matrix();
    matrix.setRotate(degrees, bitmap.getWidth() / 2, bitmap.getHeight() / 2);
    Bitmap bmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    bitmap.recycle();
    return bmp;
    }

        //获取照片中的接口回调
    private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(final byte[] data, Camera camera) {
            final int cameraid = mCameraId;
            new Thread() {
                @Override
                public void run() {
                    super.run();
                                        File file = new File(mImgPath);
                    FileUtils.createOrExistsFile(file);
                    // 获取当前旋转角度, 并旋转图片
                    mBitmap = BitmapFactory.decodeByteArray(data, 0,
                            data.length);
                                        mBitmap = rotateBitmap(mBitmap, 90);
                                         }
            }.start();
        }
    };
    
    
        当然有些个别手机本身摄像头驱动设置比较个性,旋转角度不同,这个只能单独处理了
    
    评论
    解决 无用
    打赏 举报
查看更多回答(7条)

相关推荐 更多相似问题