项目实训(二十)Camera探究

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang___yong/article/details/82020304

安卓中可以操作相机的类有hardware.Camera和Camera2,后者只适用于6.0+的部分机型,所以这里只探究API1的Camera。

项目里发现使用了SurfaceTexture,SurfaceTexture不同于SurfaceView和GLSurfaceView的地方在于它接受输入数据但是不在屏幕上绘制出来,因此可以作为数据源和view之间的一层,处理传来的数据然后交给view绘制。项目里这部分涉及到JNI,太复杂了,这这里就不探究了。只看Camera的基本使用。

这里配合SurfaceView使用。

1.预览:

初始化(有权限的前提下):Camera cam = Camera.open();

还有一个带参数的重载,传入的是camId,这个id就代表相机编号。现在的手机一般都不是一个摄像头,在Camera.CameraInfo里定义了两个常量,从字面意义上就能看出表示前置和后置两个摄像头id。

然后在surfaceView.getHolder.setCallback中的surfaceCreated里拿到SurfaceHolder交给cam执行预览,相当于一个绑定,数据从相机流入surfaceview:


默认发现相机角度偏了90度,所以这里转回去。

2.翻转镜头:

先释放原相机资源然后获得另一个相机开始预览。上面提到两个常量,前置和后置相机Id分别是1和0,所以代码是这样的:

        camera.stopPreview();
        camera.release();
        camera = Camera.open(1-currentId);
        camera.setPreviewDisplay(holder);
        camera.setDisplayOrientation(90);
        camera.startPreview();

currentId是每次获取相机时记录的当前Id。

猜你喜欢

转载自blog.csdn.net/zhang___yong/article/details/82020304
今日推荐