Android如何从CameraX获取Bitmap并在ImageView中显示?
创始人
2024-10-09 21:32:50
0
  1. 首先,需要引入 CameraX 和 CameraX 的生命周期组件库,可以在 build.gradle 中添加以下依赖项:

    implementation "androidx.camera:camera-core:1.0.0-beta07"
    implementation "androidx.camera:camera-lifecycle:1.0.0-beta07"
    
  2. 在布局文件中添加 ImageView 组件,用于显示拍照后的照片。

    
    
  3. 通过 CameraX 实现相机的预览和拍照功能,并将拍照后得到的照片转换为 Bitmap 格式:

    // 创建一个 Preview 用于相机预览
    val preview = Preview.Builder()
        .setTargetRotation(viewFinder.display.rotation)
        .build().also {
            it.setSurfaceProvider(viewFinder.surfaceProvider)
        }
    
    // 创建一个 ImageCapture 用于拍照
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
        .setTargetRotation(viewFinder.display.rotation)
        .build()
    
    // 将拍照后得到的照片转换为 Bitmap 格式
    imageCapture.takePicture(ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageCapturedCallback() {
        override fun onCaptureSuccess(image: ImageProxy) {
            val buffer = image.planes[0].buffer
            val bytes = ByteArray(buffer.remaining())
            buffer.get(bytes)
            val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
            imageView.post { imageView.setImageBitmap(bitmap) }
            super.onCaptureSuccess(image)
        }
        override fun onError(exception: ImageCaptureException) {
            super.onError(exception)
        }
    })
    
  4. 在代码中实例化 CameraX,并将 CameraX 组件绑定到生命周期:

    // 初始化 CameraX
    CameraX.bindToLifecycle(this, preview, imageCapture)
    
    // 在 onDestroy() 方法中解绑 CameraX
    CameraX.unbindAll()
    

完整代码示例:

class MainActivity : AppCompatActivity() {

    private lateInite var viewFinder: TextureView
    private lateInite var imageView: ImageView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewFinder = findViewById(R.id.view_finder)
        imageView = findViewById(R.id.preview_image_view)

        // 创建一个 Preview 用于相机预览
        val preview = Preview.Builder()
            .setTargetRotation(viewFinder.display.rotation)
            .build().also {
                it.setSurfaceProvider(viewFinder.surfaceProvider)
            }

        // 创建一个 ImageCapture 用于拍照
        val imageCapture = ImageCapture.Builder()
            .setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
            .setTargetRotation(viewFinder.display.rotation)
            .build()

        // 将拍照后得到的照片转换为 Bitmap 格式
        imageCapture.takePicture(ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageCapturedCallback() {
            override fun onCaptureSuccess(image: ImageProxy) {
                val buffer = image.planes[0].buffer
                val bytes = ByteArray(buffer.remaining())
                buffer.get(bytes)
                val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)

相关内容

热门资讯

突发!随意玩辅助器视频透视挂!... 突发!随意玩辅助器视频透视挂!果然真的有辅助下载(有挂工具)-哔哩哔哩1、下载好随意玩辅助器视频透视...
截至发稿!微信卡五星辅助器!真... 截至发稿!微信卡五星辅助器!真是真的是有辅助挂(发现有挂)-哔哩哔哩1、截至发稿!微信卡五星辅助器!...
做出回应!衢州都莱破解器!真是... 做出回应!衢州都莱破解器!真是有挂辅助软件(有挂实锤)-哔哩哔哩小薇(辅助器软件下载)致您一封信;亲...
今天下午!八仙游戏辅助!一贯存... 今天下午!八仙游戏辅助!一贯存在有辅助软件(有挂讲解)-哔哩哔哩1、进入到八仙游戏辅助是否有挂之后,...
经调查!道游辅助脚本!确实是真... 经调查!道游辅助脚本!确实是真的辅助脚本(有挂存在)-哔哩哔哩1、全新机制【道游辅助脚本ai辅助工具...
据相关数据显示!陕麻圈黑科技!... 据相关数据显示!陕麻圈黑科技!切实是有辅助软件(有挂详细)-哔哩哔哩1、进入游戏-大厅左侧-新手福利...
不少玩家反映!福州十八扑有外g... 不少玩家反映!福州十八扑有外g挂吗!其实有挂辅助修改器(详细教程)-哔哩哔哩1、完成福州十八扑有外g...
记者获悉!福建兄弟13水辅助!... 记者获悉!福建兄弟13水辅助!总是是真的辅助安装(有挂方式)-哔哩哔哩1、完成福建兄弟13水辅助辅助...
截至目前!天天贵阳app破解版... 截至目前!天天贵阳app破解版!都是真的有辅助插件(有挂解惑)-哔哩哔哩1、实时天天贵阳app破解版...
截至发稿!掌中乐游戏中心云南辅... 截至发稿!掌中乐游戏中心云南辅助!一贯存在有辅助app(有挂规律)-哔哩哔哩掌中乐游戏中心云南辅助是...