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);
    }
  • 相关阅读:
    使用java的wsimport.exe生成wsdl的客户端代码【转】
    css 动画【转】
    如何让javascript base64加密后不含+/=
    UEditor js动态创建和textarea中渲染【原】
    在js或jquery中动态添加js脚本【转】
    利用spring的MultipartFile实现文件上传【原】
    hibernate状态转换关系图【原】
    ssh框架里拦截器的权限验证基本思路【转】
    JAVA中三种URL连接方法
    程序出错问题总结
  • 原文地址:https://www.cnblogs.com/lucktian/p/7560892.html
Copyright © 2011-2022 走看看