Android:通过Camera进行拍照

Android:通过Camera进行拍照

标签(空格分隔): android


Android应用提供了Camera来控制拍照,其使用步骤如下:

  • 1,通过Camera的open()方法打开相机(默认打开后置摄像头,也可以通过指定ID打开相应的摄像头)
  • 2,通过Camera的getParameters()方法获取拍照参数对象
  • 3,调用Camera的startPreview()方法开始预览取景,在取景前需要调用Camera的setPreviewDisplay(SurfaceHolder)设置显示
  • 4,调用Camera的takePicture()方法拍照
  • 5,调用Camera的stopPreview()取消预览,并调用release()方法释放资源

权限说明

<uses-permission android:name="android.permission.CAMERA"/>

Demo

注意:android.hardware.Camera已经被废弃,已经有了新的拍照架构camera2,这里的示例仍然是老的版本

class CaptureActivity : BaseActivity<IPresenter>() {

    var isPreview = false
    val camera: Camera = Camera.open()
    val path = "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).absolutePath}/Camera"

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

        camera.setDisplayOrientation(90)
        val parameters = camera.parameters
        parameters.setPreviewSize(width, height)//预览图片的大小
        parameters.setPreviewFpsRange(4, 10)//每秒显示帧数的最小值和最大值
        parameters.pictureFormat = ImageFormat.JPEG//保存图片的格式
        parameters.set("jpeg-quality", 100)//保存图片的质量
        parameters.setPictureSize(width, height)//保存照片的尺寸


        cSurfaceView.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)
        cSurfaceView.holder.addCallback(object : SurfaceHolder.Callback {
            override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) {
            }

            override fun surfaceDestroyed(holder: SurfaceHolder?) {
                if (isPreview) camera.stopPreview()
                camera.release()
            }

            override fun surfaceCreated(holder: SurfaceHolder) {
                camera.setPreviewDisplay(holder)
                camera.startPreview()
            }
        })

        cCapture.setOnClickListener { capture() }
    }

    fun capture() {
        camera.autoFocus { success, camera ->
            if (success) {
                camera.takePicture({
                    //快门瞬间回调
                }, { data, camera ->
                    //图片原始信息回调
                }, { data, camera ->
                    //拍照完成回调
                    val file = FileUtils(path, DateUtils.getTimeStamp() + ".jpg")
                    file.clear()
                    file.append(data)
                    file.close()
                    camera.stopPreview()
                    camera.startPreview()
                    isPreview = true
                })
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值