怎么使用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
}
我现在遇到的问题是:同一个Android 平台,同一个摄像头。别人的APP,可以设置相机参数,自己按照camera2 编写的APP 能拍照,能保存图片,就是设置不了相机参数。我想,在打开相机时即获取全部参数,设置完毕,再读取相机全部参数,做个对比,看看我哪里设置有问题。
楼主可以debug断点然后copy一下数据再去做对比