Android开发 Camera2开发_2_预览分辨率或拍照分辨率的计算

本文介绍了在Android Camera2开发中如何选择合适的预览和拍照分辨率,包括求最佳比例正方形分辨率和最满足宽度的分辨率两种方法。正方形分辨率适用于小尺寸TextureView,但可能造成预览与拍照范围不一致;而最接近宽度的分辨率确保预览与拍照效果一致,但可能需要处理预览区域的空白。

前言

  不管在Camera1或者Camera2在适配不同手机/不同使用场景的情况下都需要计算摄像头里提供的分辨率列表中最合适的那一个分辨率.所以在需要大量机型适配的app,是不建议不经过计算直接自定义分辨率设置到预览或者拍照照片中,有概率会因为摄像头不支持你输入的自定义分辨率导致报错或者打不开摄像头.

  如果你的确有需求要自定义分辨率,那么使用场景只有一个那就是你是在开发Android设备,并且你输入的自定义分辨率确定在这个设备上不会报错.

  目前本人总结的2个分辨率计算方法有2个:

  •   求最佳比例正方形分辨率
  •   求最满足宽度的情况下,在找到最接近高度的分辨率.

  下面我就来解释这个2个计算方法.

求最佳比例正方形分辨率

  较为歪门邪道的方法,核心就是TextureView的宽高比与摄像头的高宽比做差值比较,注意这里一个是宽高一个是高宽,求出来的结果就是在指定指定比例最接近正方形的分辨率

  优点:因为是正方形的分辨率,所以在预览的时候不管是什么尺寸的TextureView的都能显示的不会变形.所以比较适合在小尺寸TextureView上

  缺点:在预览的时候其实无法完全显示完整(正方形不管怎么样都有可能上下或者左右超出View的大小),所以TextureView会自动忽略四周部分,只显示最中间的部分.这样拍照的时候就会发现预览与实际照片显示范围不一致.

  /**
     * 获取匹配的大小 这里是Camera2获取分辨率数组的方式,Camera1获取不同,计算一样
     * @return
     */
    private Size getMatchingSize(){
            Size selectSize = null;
            float selectProportion = 0;
        try {
            float viewProportion = (float)mTextureView.getWidth() / (float)mTextureView.getHeight();//计算View的宽高比
            CameraCharacteristics cameraCharacteristics = mCameraManager.getCameraCharacteristics(mCurrentCameraId);
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值