android Camera 如何 获取最佳合适的尺寸

Android Camera  有  Camera.Parameters 属性,那我们怎么才能找到一个 合适的尺寸 去预览才不会变形呢?

demo

1、首先我们要 通过api 去获取 当前相机 所支持的 预览 比例

Camera.Parameters parameters =camera.getParameters()
   //获取当前相机支持的 尺寸
  List<Camera.Size> vSizes = parameters.getSupportedPreviewSizes();
//获取和屏幕比列相近的 一个尺寸
 Camera.Size previewSize = getSuitableSize(vSizes);
//重新定义 宽和高 (宽始终小于高)
 int previewWidth = Math.min(previewSize.width, previewSize.height);
 int previewHeight = Math.max(previewSize.width, previewSize.height);
   //获取 最终 我们需要预览的大小比列
  mPreviewScale = previewWidth * 1f / previewHeight;
    //算出 最终 宽高
        if (mPreviewWidth > previewWidth) {
            mPreviewHeight = (int) (mPreviewWidth / mPreviewScale);
        } else if (mPreviewWidth < previewWidth) {
            mPreviewHeight = (int) (mPreviewHeight * mPreviewScale);
        }
      
Android平台上,为了获取摄像头的最佳分辨率,你需要使用`Camera`或`Camera2` API。以下是实现步骤: **对于Camera API(API级别小于19):** 1. 初始化相机:通过`Camera.open()`打开第一个可用的相机设备。 2. 获取参数信息:调用`params.getSupportedPreviewSizes()`获取所有支持的预览尺寸列表。 3. 遍历并选择最大分辨率:比较每个预览尺寸,找到宽度和高度最大的那一个作为最佳分辨率。 4. 设置参数:使用`params.setPreviewSize(width, height)`设置选定的分辨率。 ```java List<Size> sizes = camera.getParameters().getSupportedPreviewSizes(); Size bestSize = sizes.stream() .max(Comparator.comparing(size -> -size.getWidth() * size.getHeight())) .orElse(sizes.get(0)); // 如果没有更佳选项,取默认的第一个 camera.setParameters(camera.getParameters().setPreviewSize(bestSize.width, bestSize.height)); ``` **对于Camera2 API(API级别19及以上):** 1. 创建CameraManager实例,然后请求相机ID。 2. 使用`CameraCharacteristics`获取相机特性,包括`SENSOR_INFO_MAX_FRAME_WIDTH`和`SENSOR_INFO_MAX_FRAME_HEIGHT`等信息。 3. 通过`CameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)`创建capture request,并设置合适的分辨率。 4. 调用`cameraDevice.lock()`获取相机控制权,然后配置参数。 ```java CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String cameraId = manager.getCameraIdList()[0]; CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); int maxWidth = characteristics.get(SensorInfo.MAX_FRAME_WIDTH); int maxHeight = characteristics.get(SensorInfo.MAX_FRAME_HEIGHT); Size bestSize = new Size(maxWidth, maxHeight); // 然后按照Camera2 API的方式创建CaptureSession和configure CaptureRequest ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值