android camera2获取摄像头支持的分辨率

举报
风吹稻花香 发表于 2021/06/05 00:19:51 2021/06/05
【摘要】  android camera2 获取摄像头支持的分辨率 41的for循环我注释了,代码是获取最匹配的分辨率。 private Size getMatchingSize2(){ Size selectSize = null; try { CameraManager mCameraManager = (CameraManager) getSystemS...

 android camera2 获取摄像头支持的分辨率

41的for循环我注释了,代码是获取最匹配的分辨率。


  
  1. private Size getMatchingSize2(){
  2. Size selectSize = null;
  3. try {
  4. CameraManager mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
  5. for (final String cameraId : mCameraManager.getCameraIdList()) {
  6. CameraCharacteristics cameraCharacteristics = mCameraManager.getCameraCharacteristics(cameraId);
  7. StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
  8. Size[] sizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG);
  9. DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); //因为我这里是将预览铺满屏幕,所以直接获取屏幕分辨率
  10. int deviceWidth = displayMetrics.widthPixels; //屏幕分辨率宽
  11. int deviceHeigh = displayMetrics.heightPixels; //屏幕分辨率高
  12. Log.e(TAG, "getMatchingSize2: 屏幕密度宽度=" + deviceWidth);
  13. Log.e(TAG, "getMatchingSize2: 屏幕密度高度=" + deviceHeigh);
  14. /**
  15. * 循环40次,让宽度范围从最小逐步增加,找到最符合屏幕宽度的分辨率,
  16. * 你要是不放心那就增加循环,肯定会找到一个分辨率,不会出现此方法返回一个null的Size的情况
  17. * ,但是循环越大后获取的分辨率就越不匹配
  18. */
  19. // for (int j = 1; j < 41; j++) {
  20. for (int i = 0; i < sizes.length; i++) { //遍历所有Size
  21. Size itemSize = sizes[i];
  22. Log.e(TAG, "当前itemSize 宽=" + itemSize.getWidth() + "高=" + itemSize.getHeight());
  23. //判断当前Size高度小于屏幕宽度+j*5 && 判断当前Size高度大于屏幕宽度-j*5 && 判断当前Size宽度小于当前屏幕高度
  24. if (itemSize.getHeight() < (deviceWidth ) && itemSize.getHeight() > (deviceWidth )) {
  25. if (selectSize != null) { //如果之前已经找到一个匹配的宽度
  26. if (Math.abs(deviceHeigh - itemSize.getWidth()) < Math.abs(deviceHeigh - selectSize.getWidth())) { //求绝对值算出最接近设备高度的尺寸
  27. selectSize = itemSize;
  28. continue;
  29. }
  30. } else {
  31. selectSize = itemSize;
  32. }
  33. }
  34. }
  35. if (selectSize != null) { //如果不等于null 说明已经找到了 跳出循环
  36. break;
  37. }
  38. // }
  39. }
  40. } catch (CameraAccessException e) {
  41. e.printStackTrace();
  42. }
  43. Log.e(TAG, "getMatchingSize2: 选择的分辨率宽度="+selectSize.getWidth());
  44. Log.e(TAG, "getMatchingSize2: 选择的分辨率高度="+selectSize.getHeight());
  45. return selectSize;
  46. }

我的手机可以支持的:

 当前itemSize 宽=3968高=2976
    当前itemSize 宽=640高=480
    当前itemSize 宽=320高=240
    当前itemSize 宽=1280高=720
    当前itemSize 宽=1920高=1080
    当前itemSize 宽=3264高=1840
    当前itemSize 宽=3264高=2448

camera的获取方法:

mCamera = Camera.open(mCamId);
        Camera.Parameters params = mCamera.getParameters();

        List<Size> pictureSizes = params.getSupportedPictureSizes();
        int length = pictureSizes.size();
        for (int i = 0; i < length; i++) {
            Log.e("SupportedPictureSizes","SupportedPictureSizes : " + pictureSizes.get(i).width + "x" + pictureSizes.get(i).height);
        }

        List<Size> previewSizes = params.getSupportedPreviewSizes();
        length = previewSizes.size();
        for (int i = 0; i < length; i++) {
            Log.e("SupportedPreviewSizes","SupportedPreviewSizes : " + previewSizes.get(i).width + "x" + previewSizes.get(i).height);
        }
 

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/102833279

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。