JetPack开发中使用CameraX完成拍照和拍视频功能
2020-06-04 15:00:41 来源:易采站长站 作者:于海丽
实现起来也非常简单,首先绘制一个圆,监听该View的点击和长按事件,长按的时候在根据总录制时长和当前录制时间算出需要绘制的角度,就可以在圆上面绘制进度了。
最后通过接口将点击 长按和录制完成的事件返回,跟前面的拍照,录制,录制完成的代码结合起来就完成上面的效果了。
CameraView
如果觉得前面的初始化还不够简单,那么可以使用CameraX提供的CameraView了,这里面将PreviewView,Preview,ImageCapture,VideoCapture等都封装起来了,而且还能实现缩放,裁剪,旋转等功能,使用起来更加简单。
首先xml文件中添加CameraView
<androidx.camera.view.CameraView android:id="@+id/view_finder" android:layout_width="match_parent" android:layout_height="match_parent" />
然后在Activity中实例化CameraView,直接绑定当前生命周期就可以了。
mBtnCameraSwitch = findViewById(R.id.camera_switch_button); mCameraView.bindToLifecycle(this);
只需两句话就完成了前面的初始工作。然后就可以愉快的拍照和录制视频了。
拍照和录制的代码跟前面一样只不过全都是通过CamerView对象来调用 mCameraView.takePicture , mCameraView.startRecording ,调用之前需要通过 mCameraView.setCaptureMode(CameraView.CaptureMode.IMAGE) 来切换当前的模式是拍照还是录像。
将前面的自定义的RecordView加入布局文件中,跟CameraView的拍照、录像代码一结合,很快就能实现跟前面一样的效果了。
图片分析
CameraX还提供了图像分析功能,它提供了可供 CPU 访问以执行图像处理、计算机视觉或机器学习推断的图像,可以无缝的访问缓冲区,一般用不到但功能很强大。创建一个图片分析器然后绑定声明周期即可。
mImageAnalysis = new ImageAnalysis.Builder()
.setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(rotation)
.build();
mImageAnalysis.setAnalyzer(mExecutorService, new ImageAnalysis.Analyzer() {
@Override
public void analyze(@NonNull ImageProxy image) {
}
});
cameraProvider.bindToLifecycle(CameraActivity.this,
cameraSelector,mPreview,mImageCapture,mVideoCapture,mImageAnalysis);
供应商扩展
供应商扩展程序:CameraX提供了外部扩展的API,可以直接对接手机产商,如果该手机厂商实现了CameraX的扩展程序,就可以使用VamerX的扩展API直接调用这些效果比如:美颜、DHR、夜间、自动等模式。
因为不是所有的手机厂商都支持扩展程序,所以在使用扩展的时候需要判断一下该手机是否支持,支持才添加。
给预览界面设置外部扩展,需要 Preview.Builder 和 CameraSelector cameraSelector) 两个参数
private void setPreviewExtender(Preview.Builder builder, CameraSelector cameraSelector) {
AutoPreviewExtender extender = AutoPreviewExtender.create(builder);
if(extender.isExtensionAvailable(cameraSelector)){
extender.enableExtension(cameraSelector);
}
BokehPreviewExtender bokehPreviewExtender = BokehPreviewExtender.create(builder);
if(bokehPreviewExtender.isExtensionAvailable(cameraSelector)){
bokehPreviewExtender.enableExtension(cameraSelector);
}
HdrPreviewExtender hdrPreviewExtender = HdrPreviewExtender.create(builder);
if(hdrPreviewExtender.isExtensionAvailable(cameraSelector)){
hdrPreviewExtender.enableExtension(cameraSelector);
}
BeautyPreviewExtender beautyPreviewExtender = BeautyPreviewExtender.create(builder);
if(beautyPreviewExtender.isExtensionAvailable(cameraSelector)){
beautyPreviewExtender.enableExtension(cameraSelector);
}
NightPreviewExtender nightPreviewExtender = NightPreviewExtender.create(builder);
if(nightPreviewExtender.isExtensionAvailable(cameraSelector)){
nightPreviewExtender.enableExtension(cameraSelector);
}
}













闽公网安备 35020302000061号