zoukankan      html  css  js  c++  java
  • 解决自定义相机分辨率适配、扭曲的问题

    在自定义相机和扫码的时候,如果不设置相机的默认分辨率,有可能导致相机用的是最小的分辨率,照出来的照片很模糊。

    所以自定义相机的时候,需要获取屏幕分辨率,相机的预览分辨率,进行最佳的匹配。

    由于相机的预览分辨率几乎都是 按照横屏的来描述的,eg 1920*1080

    而手机一般是竖屏的,如果自定义的相机是竖屏的,匹配相机预览分辨率的时候,如果直接传入当前的屏幕宽高是,匹配不到最佳的分辨率的

    如果有虚拟键盘,就更匹配不到,最后就会取一个相机的最大预览分辨率,但是这个并不一定是最佳匹配的,有可能屏幕是9:16的,而这个最大分辨率是4:3的,这个时候预览的时候就会变形,图像发生扭曲。

    为了达到最佳匹配,我们可以针对竖屏的时候,进行宽高转换,用来适配最佳分辨率,这里的宽高应该拿手机屏幕的实际宽高,而不是显示宽高,有虚拟键盘的时候,显示高度比实际高度小

    public void initFromCameraParameters(Camera camera) {
    Camera.Parameters parameters = camera.getParameters();
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = manager.getDefaultDisplay();

    if(Build.VERSION.SDK_INT>16){
    DisplayMetrics dm = new DisplayMetrics();
    manager.getDefaultDisplay().getRealMetrics(dm);
    screenResolution = new Point(dm.widthPixels, dm.heightPixels); // 这里拿到的是屏幕的实际宽高
    }else{  
    DisplayMetrics dm = new DisplayMetrics();
    @SuppressWarnings("rawtypes")
    Class c;
         try {
    c = Class.forName("android.view.Display");
    @SuppressWarnings("unchecked")
    Method method = c.getMethod("getRealMetrics",DisplayMetrics.class);
    method.invoke(display, dm);
    screenResolution = new Point(dm.widthPixels, dm.heightPixels);
    }catch(Exception e){
    screenResolution = new Point(display.getWidth(), display.getHeight()); // 这里拿到的是屏幕的显示宽高
    e.printStackTrace();
    }
    }
       LogUtil.i(TAG, "屏幕分辨率宽高: " + screenResolution);
    Point screenResolutionForCamera = new Point();
    screenResolutionForCamera.x = screenResolution.x;
    screenResolutionForCamera.y = screenResolution.y;
    if(screenResolution.x < screenResolution.y){ // 解决竖屏拉伸问题
    screenResolutionForCamera.x = screenResolution.y;
    screenResolutionForCamera.y = screenResolution.x;
    LogUtil.i(TAG, "竖屏转换屏幕分辨率宽高: " + screenResolutionForCamera);
    }
    cameraResolution = findBestPreviewSizeValue(parameters, screenResolutionForCamera);
    LogUtil.i(TAG, "相机的分辨率: " + cameraResolution);
    }
  • 相关阅读:
    centos7.6 安装与配置 MongoDB yum方式
    MongoDB 介绍
    centos 关闭selinux
    前端 HTML标签属性
    前端 HTML 标签嵌套规则
    前端 HTML 标签分类
    前端 HTML body标签相关内容 常用标签 表单标签 form里面的 input标签介绍
    前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
    前端 HTML form表单标签 select标签 option 下拉框
    POJ 1426
  • 原文地址:https://www.cnblogs.com/lucktian/p/7560892.html
Copyright © 2011-2022 走看看