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

怎么使用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日