前言
官方文档
https://developer.android.google.cn/jetpack/androidx/releases/camera?hl
在 Jetpack Compose 中获取相机画面可以按照以下步骤进行:
添加依赖
向您的 /gradle/libs.versions.toml 中添加以下内容:
1 | [versions] |
依赖
1 | dependencies { |
注意
agp 最低版本要求是:”8.6.0”
设置权限
添加权限
在 AndroidManifest.xml 文件中添加相机权限:
1 | <uses-permission android:name="android.permission.CAMERA" /> |
如果你的应用面向 Android 13 及以上版本,还需要在 AndroidManifest.xml 中声明相机使用情况:
1 | <uses-permission android:name="android.permission.CAMERA" /> |
权限申请
1 | import android.Manifest |
示例
工具类
1 | package com.xhkjedu.camera_test.utils.camera |
视图
1 | import android.content.ContentValues |
使用
1 | import androidx.compose.runtime.Composable |
预览和图像分析
这样既可以预览,也可以使用用于分析的Bitmap作为拍照的图片。
1 | import android.content.Context |
调用
1 | val context = LocalContext.current |
拍照的时候直接取latestBitmap的copy就行
1 | var capturedImage by remember { mutableStateOf<Bitmap?>(null) } |
注意
默认用于分析的图片比较模糊,通过设置
setTargetResolution,可以调整其清晰度。
预览翻转
我这里摄像头预览的界面和拍照获取的界面图片方向不一致,AI提供的翻转previewView也不行,最后试的翻转graphicsLayer可以。
1 | // 相机预览 |
要注意以下两个地方
必须设置previewView的实现模式(Use a TextureView for the preview.)
1 | previewView.implementationMode = PreviewView.ImplementationMode.COMPATIBLE |
设置graphicsLayer
1 | Modifier |
获取旋转角度
1 | // 计算照片需要旋转的角度(使照片与 PreviewView 方向一致) |