Android 自定义相机(录像) 解决预览 照片方向问题

本文介绍了在Android自定义相机开发中遇到的预览方向、图像变形及照片保存方向问题,并提供了相应的解决方法。通过监听设备方向、调整SurfaceView宽高比例和使用ExifInterface,成功解决了这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是自定义相机遇到的问题:
1. 相机预览的方向
2. 相机预览时图像变形
3. 照片保存到本地的方向

最近刚好公司的业务需要开发遥控拍照的功能,最初想通过调用系统的相机来解决,不过最后始终没找到让系统相机自动拍照的方法, 故只能改用 自定义相机来开发。当然也就发现了相机开发中的坑。

1 解决相机预览方向的问题:

 /**
     * 保证预览方向正确
     *
     * @param activity
     * @param cameraId
     * @param camera
     */
    public static void setCameraDisplayOrientation(Activity activity, int cameraId, Camera camera) {
        android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
        android.hardware.Camera.getCameraInfo(cameraId, info);
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();

        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0:
                degrees = 0;
                break;
            case Surface.ROTATION_90:
                degrees = 90;
                break;
            case Surface.ROTATION_180:
                degrees = 180;
                break;
            case Surface.ROTATION_270:
                degrees = 270;
                break;
        }
        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360;  // compensate the mirror
        } else {  // back-facing
            result = (info.orientation - degrees + 360) % 360;
        }
        camera.setDisplayOrientation(result);
    }

2 解决相机预览变形的问题,相机在预览变形时肯定是因为 预览的宽高的比例 和 surfaceview设置的不一致

/**
     * 设置Camera参数
     */
    private void setCameraParameters() {
        if (mCamera != null) {
            mParameters = mCamera.getParameters();
            List<Camera.Size> pictureSizeList = mParameters.getSupportedPictureSizes();
            /* 从列表中选取合适的分辨率 */
            Camera.Size picSize = CameraUt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值