操蛋的Camera V2

操蛋的Camera V2
时代的更替,带来的却是科技的不断进步
在android 5以后创建相机要比在android 5以前要繁琐的多,但对于我们这群懒惰的人不可能让自己的工作变得繁琐除非在技术上有更加的进步,
是的没错,在API 21后我们对创建相机和摄像头的控制变得更加多了,虽然变得复杂了,但是技术是可以掌握的而控制是先天的,在等价的替换下我们得到了更多的对摄像头的控制。
想自己做个照相机玩的(装逼的)可以看看我的指南:
(0):定义显示镜头的TextureView
//        创建textureView
        textureView = (TextureView) findViewById(R.id.textureView);
        textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
            @Override
            public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {//TextureView准备好后触发
                openCamera();
            }

            @Override
            public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

            }

            @Override
            public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
                return false;
            }

            @Override
            public void onSurfaceTextureUpdated(SurfaceTexture surface) {

            }
        });

(1):打开摄像头:
//        定义摄像头管理器
        cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
//        通过管理器打开摄像头
        try {
            cameraManager.openCamera("0", stateCallbace, null);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
2):实现上面openCamera()方法中的stateCallbace; (这是一个回调机制)
//    实现打开摄像头后的回调机制
    private CameraDevice.StateCallback stateCallbace = new CameraDevice.StateCallback() {
        @Override
        public void onOpened(final CameraDevice camera) {  //摄像头打开时激发
//       (2)
        }

        @Override
        public void onDisconnected(CameraDevice camera) {  //摄像头断开时激发

        }

        @Override
        public void onError(CameraDevice camera, int error) {   //打开摄像头出错时激发

        }
    };
     (3):在onOpend()中2的位置创建预览
//            在此实现预览机制
            try {
                captureRequestBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);//中间参数代表预览
//                设置显示预览的Suface
                getSurface();// 3
//            设置预览显示
                captureRequestBuilder.addTarget(surface);
//                设置预览请求
                camera.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
                    @Override
                    public void onConfigured(CameraCaptureSession session) {
                        if (camera==null)
                        {
                            return;
                        }
//                        设置预览模式
//                自动聚焦
                        captureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                                CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
//                自动曝光
                        captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                                CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
//                        CaptureRequest捕获预览参数  CaptureRequest.Builder获得参数
                        captureRequest = captureRequestBuilder.build();
                        try {
//                            开始预览
                            session.setRepeatingRequest(captureRequest, null,null);
                        } catch (CameraAccessException e) {
                            e.printStackTrace();
                        }
(4):在上面代码中有个getSurface()方法
    public void getSurface() {
        SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
        surface = new Surface(surfaceTexture);
    }




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值