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

关于 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条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器