CamerX

CamerX

 // CameraX core library using the camera2 implementation
    def camerax_version = "1.0.0-alpha10"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    // If you want to use the CameraX Lifecycle library
    implementation "androidx.camera:camera-lifecycle:${camerax_version}"
    implementation "androidx.camera:camera-view:1.0.0-alpha08"

首先引入最新版本的camerax
2020 年 1 月 22 日 Camera-Camera2 和 Camera-Core 版本 1.0.0 合起来了。
由于cameraX更新很快,所以贴上最近用法
Camera-Core 版本 1.0.0-alpha07,版本之后的用法

class MainActivity : AppCompatActivity() {

    private val mImageCapture by lazy {
        ImageCapture.Builder().build()
    }

    private val mListenableFuture by lazy {
        ProcessCameraProvider.getInstance(this)
    }
    private val mExecutor by lazy {
        ContextCompat.getMainExecutor(this)
    }
    private val mPreview by lazy {
        Preview.Builder()
            .setTargetResolution(Size(720, 1280))
            .build().apply {
                setSurfaceProvider(previewView.previewSurfaceProvider)
            }
    }
    private val mCameraSelector by lazy {
        CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
    }

    private val mImageAnalysis by lazy {
        ImageAnalysis.Builder()
            .build().apply {
                setAnalyzer(ContextCompat.getMainExecutor(this@MainActivity),
                    ImageAnalysis.Analyzer {
                    })
            }
    }


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

    private fun setListener() {
        button.setOnClickListener {
            mImageCapture
                .takePicture(
                    outputFileOptions(),
                    mExecutor,
                    mOnImageSavedCallback
                )

        }
    }

    private fun outputFileOptions(): ImageCapture.OutputFileOptions {
        val name = System.currentTimeMillis()
        val path =
            Environment.getExternalStorageDirectory().path + "/yingying"
        File(path).mkdirs()
        val pathName = "$path/$name.jpg"
        Toast.makeText(this, pathName, Toast.LENGTH_LONG).show()
        val file = File(pathName)
        return ImageCapture.OutputFileOptions.Builder(file).build()
    }

    private val mOnImageSavedCallback = object : ImageCapture.OnImageSavedCallback {
        override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
            Toast.makeText(this@MainActivity, "成功", Toast.LENGTH_LONG).show()
        }

        override fun onError(exception: ImageCaptureException) {

            Toast.makeText(
                this@MainActivity,
                exception.message.toString(),
                Toast.LENGTH_LONG
            ).show()
        }
    }

    private fun setCamera() {
        mListenableFuture.addListener(Runnable {
            mListenableFuture.get().bindToLifecycle(
                this as LifecycleOwner,
                mCameraSelector,
                mPreview,
                mImageAnalysis,
                mImageCapture
            )
        }, mExecutor)
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值