Android开发指南之相机-----选择一个相机库

选择一个相机库

英文原文出处

注意:如果您想使用设备的默认相机应用程序执行基本的相机操作,如捕捉照片或视频,请参阅Camera intents(下文有中文翻译)

如果你想在Android应用程序中添加摄像头功能,你有三个主要选项:

对于大多数开发者,我们推荐CameraX。CameraX是一个Jetpack库,支持绝大多数Android设备(Android 5.0及更高版本),并提供了围绕常见用例设计的一致的高级API。CameraX为您解决设备兼容性问题,这样您就不必向应用程序添加特定于设备的代码。

CameraX是建立在Camera2包之上的。如果您需要低级别的相机控件来支持复杂的用例,Camera2是一个不错的选择,但是这个API比CameraX更复杂,并且需要管理特定于设备的配置。与CameraX一样,Camera2可以在Android 5.0 (API级别21)及更高版本上运行。

原来的Android Camera类已弃用。新的应用程序应该使用CameraX(推荐)或Camera2,现有的应用程序应该迁移,以利用新功能,避免失去与未来设备的兼容性。

Camera intents

要执行基本的相机操作,如使用设备的默认相机应用程序捕捉照片或视频,您不需要集成相机库。使用Intent就可以了。

用相机应用拍张照片

Android通过调用Intent将操作委托给其他应用程序。这个过程包括三部分:Intent本身,启动外部Activity的调用,以及当焦点返回到Activity时处理图像数据的一些代码。

这是一个调用Intent来捕捉照片的函数。

val REQUEST_IMAGE_CAPTURE = 1
 
private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // display error state to the user
    }
}

用摄像应用录制视频

你也可以调用Intent来捕捉视频。

val REQUEST_VIDEO_CAPTURE = 1
 
private fun dispatchTakeVideoIntent() {
    Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
        takeVideoIntent.resolveActivity(packageManager)?.also {
            startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
        } ?: run {
          //display error state to the user
        }
    }
}

startActivityForResult()方法由调用resolveActivity()的条件保护,该条件返回第一个可以处理Intent的活动组件。执行这个检查来确保你调用的Intent不会让你的应用程序崩溃。

相机的扩展

Camera2和CameraX都提供了一个扩展API,让你的应用程序访问以下供应商在Android设备上实现的扩展:

  • Auto:根据当前场景背景调整扩展模式,这取决于供应商库实现。例如,在低光场景下,Auto可能会切换到夜间来拍照。对于肖像照片,自动可以应用面部修饰或散景。
  • Bokeh:锐化前景主题,模糊背景。通常用于拍摄背景柔和、失焦的人像照片。
  • Face Retouch:润色皮肤纹理,眼下色调等。
  • HDR(高动态范围):扩大曝光范围,产生更生动的照片。在HDR模式下,相机拍摄几张不同曝光值的照片,并将它们合并为一张。
  • Night:在低光情况下使照片变亮。相机可以在不同的曝光值下拍摄几张照片,并将它们合并为一张。这个过程可能需要几秒钟,在相机拍照时,用户应该保持手机不动。

Camera2和CameraX扩展api公开了相同的扩展集,这些扩展在许多受支持的设备上可用。

注意:Camera2和CameraX扩展只用于预览和图像捕获用例,而不是视频捕获。

支持的设备

并非所有设备都支持扩展,即使设备支持扩展,也可能不支持所有扩展。

有关支持扩展的已知设备的列表,请参见受支持的设备。要检查扩展是否在您的设备上可用,请分别查看Camera2 Extensions API和CameraX Extensions API文档。

下一步

了解如何为你的应用程序启用摄像头扩展:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值