前言:系统相机满足不了自定义界面的需求,这时候可以用Camera2和TextureView相结合的方式。
参考:Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能
这位作者写得已经非常好了,我的DEMO只不过是改了点东西,一个是kotlin语言改成java语言,一个是新增了对拍照后图片角度和大小的处理以及图片的保存,这里稍微讲一下:
1、用Camera2拍照,前置摄像头拍出来的图像是镜像,也就是左右反过来的,这与我们照镜子和一般的自拍不同,需要处理,作者已经写了。
2、Camera2拍照后图片会旋转,因为相机默认是横屏的(即横屏时拍默认0°)如果竖直着拍,前置摄像头时会旋转270°,后置摄像头会旋转90°,作者说加入captureRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, mCameraSensorOrientation);这个设置会使拍出来的方向为自然方向,但经过测试,部分手机对这个设置不起作用。所以,有效的做法是,先获取摄像头方向mCameraSensorOrientation = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);然后根据这个方向再结合前置后置的情况对图片进行适当的旋转。
3、图片保存以及对图片进行可选择的压缩。
代码地址:https://github.com/qugengting/Camera2Demo