此人已下架 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条)

报告相同问题?

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理