Android进阶宝典 -- CameraX与Camera2的使用比对_camerax camera2

本文详细介绍了如何在Android中使用CameraX和Camera2进行相机操作,包括建立连接、创建预览会话、设置预览参数等。通过对比两者的使用方法,展示了它们在处理相机数据和错误处理上的区别。示例代码中包含onOpened、onDisconnected、onError等关键回调函数,以及ImageReader的图像处理。
摘要由CSDN通过智能技术生成

}

override fun onDisconnected(camera: CameraDevice) {

}

override fun onError(camera: CameraDevice, error: Int) {

}


因为应用层和相机内核层已经完全解耦,所以两者想要进行数据传递,必须要建立桥梁,那么通过ImageReader就可以完成,可以通过传入一些参数:预览尺寸、图像格式等,设置setOnImageAvailableListener,有数据发送过来之后,通过onImageAvailable获取到数据显示即可。


![](https://img-blog.csdnimg.cn/23dcbff4328941d7ad71719ba1289afe.png)


然后,调用CameraManager的openCamera方法,才是真正打开摄像头,那么成功还是失败呢?就需要通过 CameraDevice.StateCallback的回调来判断。


**第四步:建立会话,创建预览请求**



override fun onOpened(camera: CameraDevice) {
this.cameraDevice = camera
//建立会话
createPreviewSession()
}

override fun onDisconnected(camera: CameraDevice) {
cameraDevice?.close()
cameraDevice = null
}

override fun onError(camera: CameraDevice, error: Int) {
cameraDevice?.close()
cameraDevice = null
}


当打开Camera之后,如何判断是否成功开启摄像头呢?就是通过onOpened这个回调来判断,当成功开启摄像头之后,就需要与相机内核建立会话,发起预览请求createCaptureRequest。



private fun createPreviewSession() {
//创建Surface,所有的画面渲染都是由Surface处理
val texture = textureView?.surfaceTexture
texture?.setDefaultBufferSize(previewWidth, previewHeight)
val surface = Surface(texture)

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值