我想从相机中取出一帧,对其进行一些处理并暂停进入的帧直到我再次触摸屏幕。一旦我触摸屏幕,它将恢复接收帧并处理下一帧。我所做的是禁用onCameraFrame中的视图并在onTouch中重新启用它:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
final Mat rgba = inputFrame.rgba();
final Mat gray = inputFrame.gray();
if (mEstimator.getProcessFrameDone()) {
Log.i(TAG, "Process frame done.");
mResumeFrameCapture = true;
mProcessThisFrame = false;
mOpenCvCameraView.disableView();
}
if (mProcessThisFrame) {
Log.i(TAG, "Processing frame.");
mEstimator.processFrame(rgba);
}
Core.flip(rgba, rgba, 1);
return rgba;
}
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG, "Screen touched.");
mProcessThisFrame = true;
if (mResumeFrameCapture) {
Log.i(TAG, "Resuming frame captures.");
mEstimator.setProcessFrameDone();
mProcessThisFrame = false;
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6,
mContext, mLoaderCallback);
}
mResumeFrameCapture = false;
return false;
}
问题是,我认为disableView无法正常工作。当我通过调试器运行它时,我甚至无法跨过它。它只是挂起。但是,当您按下多任务按钮并使其暂停时,onPause运行相同的disableView代码,您可以跳过它。我已经尝试过直接运行onPause,但它仍然无法运行。关于如何正确禁用视图的任何想法?
答案 0 :(得分:0)
我发现了原因。这是因为您无法禁用OnCameraFrame功能中的视图。你必须在功能之外做。
答案 1 :(得分:0)
要暂停时只需输入以下内容:
cameraBridgeViewBase.setVisibility(SurfaceView.INVISIBLE);
以及以下要恢复的内容:
cameraBridgeViewBase.setVisibility(SurfaceView.VISIBLE);
免责声明!这实际上并没有暂停流,只是消除了可见性,因此可以在屏幕上显示任何其他对象。