怎么使用Android camera2 获取相机所有参数?
android camera 的方法是 param.flatten();
怎么使用Android camera2 获取相机所有参数?
android camera 的方法是 param.flatten();
获取之后再进行设置,如下为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
}