香山红叶一片片 2022-06-29 09:28 采纳率: 0%
浏览 70

怎么使用Android camera2 获取相机所有参数?

怎么使用Android camera2 获取相机所有参数?

android camera  的方法是   param.flatten();

  • 写回答

3条回答 默认 最新

  • 五一编程 2022-06-29 09:55
    关注

    获取之后再进行设置,如下为kotlin写法

    
        //配置相机参数
        private fun initParameters(camera: Camera) {
            try {
                mParameters = camera.parameters
                mParameters.previewFormat = ImageFormat.NV21   //设置预览图片的格式
    
                //获取与指定宽高相等或最接近的尺寸
                //设置预览尺寸
                val bestPreviewSize = getBestSize(mSurfaceView.width, mSurfaceView.height, mParameters.supportedPreviewSizes)
                bestPreviewSize?.let {
                    mParameters.setPreviewSize(it.width, it.height)
                }
                //设置保存图片尺寸
                val bestPicSize = getBestSize(picWidth, picHeight, mParameters.supportedPictureSizes)
                bestPicSize?.let {
                    mParameters.setPictureSize(it.width, it.height)
                }
                //对焦模式
                if (isSupportFocus(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE))
                    mParameters.focusMode = Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE
    
                camera.parameters = mParameters
            } catch (e: Exception) {
                e.printStackTrace()
                toast("相机初始化失败!")
            }
        }
    
           //获取与指定宽高相等或最接近的尺寸
        private fun getBestSize(targetWidth: Int, targetHeight: Int, sizeList: List<Camera.Size>): Camera.Size? {
            var bestSize: Camera.Size? = null
            var targetRatio = (targetHeight.toDouble() / targetWidth)  //目标大小的宽高比
            var minDiff = targetRatio
    
            for (size in sizeList) {
                var supportedRatio = (size.width.toDouble() / size.height)
                log("系统支持的尺寸 : ${size.width} * ${size.height} ,    比例$supportedRatio")
            }
    
            for (size in sizeList) {
                if (size.width == targetHeight && size.height == targetWidth) {
                    bestSize = size
                    break
                }
                var supportedRatio = (size.width.toDouble() / size.height)
                if (Math.abs(supportedRatio - targetRatio) < minDiff) {
                    minDiff = Math.abs(supportedRatio - targetRatio)
                    bestSize = size
                }
            }
            log("目标尺寸 :$targetWidth * $targetHeight ,   比例  $targetRatio")
            log("最优尺寸 :${bestSize?.height} * ${bestSize?.width}")
            return bestSize
        }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 6月29日

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真