安卓开发之自定义相机时图片变形问题

在开发的过程中哦鞥到了一个在预览的时候预览中的图片一直在变形,所以在网上查了一个方法,记录下来:

首先是要获取一个最适合的预览尺寸

    /**
     * 通过对比得到与宽高比最接近的尺寸(如果有相同尺寸,优先选择)
     * @return 得到与原宽高比例最接近的尺寸
     */
    protected static Point findBestPreviewSizeValue(List<Camera.Size> sizeList){
        int bestX = 0;
        int bestY = 0;
        int size = 0;
        for (Camera.Size nowSize : sizeList){
            int newX = nowSize.width;
            int newY = nowSize.height;
            int newSize = Math.abs(newX * newX) + Math.abs(newY * newY);
            float ratio = (float) (newY * 1.0 / newX);
            if(newSize >= size && ratio != 0.75){//确保图片是16:9
                bestX  = newX;
                bestY = newY;
                size = newSize;
            }else if(newSize < size){
                continue;
            }
        }
        if(bestX > 0 && bestY > 0){
            return new Point(bestX,bestY);
        }
        return null;

    }

第二步是将最适合的尺寸设置给相机

try {
            //为了适配部分手机setparams失败的问题,失败则不设置
            try {
                Camera.Parameters parameters = camera.getParameters();
                Point bestPreviewSizeValue1 = findBestPreviewSizeValue(parameters.getSupportedPreviewSizes());
                parameters.setPreviewSize(bestPreviewSizeValue1.x,bestPreviewSizeValue1.y);
                camera.setParameters(parameters);
            }catch (Exception e){
                LogUtils.logE(TAG,"set parameters fail");
            }


            //进行横竖屏判断然后对图像进行校正
            //如果是竖屏
            if(context.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
                camera.setDisplayOrientation(90);
            }else {//如果是横屏
                camera.setDisplayOrientation(0);
            }
            //开启预览
            camera.startPreview();
            // 2如果要实现连续的自动对焦,这一句必须加
            camera.cancelAutoFocus();

        } catch (Exception e) {
            e.printStackTrace();
            camera.release();
            camera = null;
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值