Android自定义相机拍照在部分手机闪退

在自定义相机的时候,我们一般都会对相机初始化的时候,对预览尺寸以及照片尺寸按照自己的需要进行设置,所以相机闪退大概率是由于我们的计算的尺寸出现了问题,导致相机异常闪退;

首先我们来看下相机预览的分辨率怎么计算:

首先,毋庸置疑的是我们要计算预览分辨率,那么肯定要先拿到到当前设备的宽高,所以

screenWidth = activity.getWindowManager().getDefaultDisplay().getWidth();
screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();

既然我们拿到了屏幕的宽高,那么接下来就要计算屏幕的宽高比了

double optimal = screenWidth / (double)screenHeight;
if (optimal > 1) {
    optimal = screenHeight / (double)screenWidth;
}

我们拿到了宽高比之后,然后获取就该获取当前设备支持的预览分辨率集合了,来找到适合我们的分辨率

double difference = 1;
List<Camera.Size> list=mCamera.getParameters().getSupportedPreviewSizes()
for (Camera.Size size:list) {
    double ratio = (double) size.height / size.width;
    double adapterRatio = Math.abs(ratio - optimalScale);
    if (size.height < 500) continue;
    if (adapterRatio < 1) {
        difference = adapterRatio;
    }
}

通过上面的便利查找,找到了系统支持的预览分辨率和屏幕宽高比最相近的,那么接下来就是我们将最相近的分辨率,并且返回到调用的地方即可

for(Camera.Size size:list) {
    double ratio = (double) size.height / size.width;
    if (size.height < 500) continue;
    if (Math.abs(ratio-optimalScale) < (difference+0.001)) {
        if (optimalSize != null) {
            if (size.height>700 && size.height<1200) {
                //如果匹配上最佳分辨率,直接返回
                return size;
            }else {
                if (optimalSize.width < size.width || optimalSize.height < size.height) {
                    optimalSize = size;
                }
            }
        } else {
            optimalSize = size;
        }
    }
}

接下来就该计算照片的分辨率了,其实照片分辨率和预览的分辨率计算方法基本上是一致的,可以参考上面分辨率计算方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值