android kotlincamera2 分辨率代码如何写
时间: 2023-08-06 13:09:32 浏览: 104
android相机代码
3星 · 编辑精心推荐
下面是Kotlin代码示例,用于设置Camera2 API相机的预览分辨率:
```kotlin
// 获取相机设备的特征
val characteristics = cameraManager.getCameraCharacteristics(cameraId)
// 获取相机支持的 StreamConfigurationMap 对象
val map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)
// 获取相机支持的所有预览分辨率
val outputSizes = map?.getOutputSizes(SurfaceTexture::class.java)
// 选择所需的分辨率,例如选择最大的分辨率
val largest = Collections.max(
Arrays.asList(*outputSizes),
CompareSizesByArea()
)
// 设置相机预览分辨率
previewSize = largest
```
需要自定义一个 `CompareSizesByArea` 类来比较不同分辨率之间的大小:
```kotlin
private class CompareSizesByArea : Comparator<Size> {
// 按面积比较两个尺寸大小
override fun compare(lhs: Size, rhs: Size): Int {
// 强制转换为 long 型,以避免发生整型溢出
return java.lang.Long.signum(lhs.width.toLong() * lhs.height - rhs.width.toLong() * rhs.height)
}
}
```
最后,将所选的预览分辨率应用于相机预览:
```kotlin
// 配置相机预览
val texture = textureView.surfaceTexture
texture.setDefaultBufferSize(previewSize.width, previewSize.height)
val surface = Surface(texture)
// 创建一个用于预览的 CaptureRequest.Builder
val previewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
previewRequestBuilder.addTarget(surface)
// 创建一个 CameraCaptureSession 用于相机预览
cameraDevice.createCaptureSession(Arrays.asList(surface), object : CameraCaptureSession.StateCallback() {
override fun onConfigured(session: CameraCaptureSession) {
// 预览会话创建成功
captureSession = session
// 开始预览
previewRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO)
session.setRepeatingRequest(previewRequestBuilder.build(), null, null)
}
override fun onConfigureFailed(session: CameraCaptureSession) {
// 预览会话创建失败
}
}, null)
```
阅读全文