Java 未调用onPreviewFrame
我有以下方法打开面向用户的摄像头:Java 未调用onPreviewFrame,java,android,camera,Java,Android,Camera,我有以下方法打开面向用户的摄像头: CameraOperations.java private Parameters parameters = null; private Camera cam = null; private Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); private static int camNumber = Camera.getNumberOfCameras();
CameraOperations.java
private Parameters parameters = null;
private Camera cam = null;
private Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
private static int camNumber = Camera.getNumberOfCameras();
public Camera toggleFaceCamera(){
if(cam == null){
for(int counter = 0; counter < camNumber; counter++){
Camera.getCameraInfo(counter, cameraInfo);
if(cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
try{
cam = Camera.open(counter);
parameters = cam.getParameters();
parameters.setPreviewFormat(16);
return cam;
}catch(RuntimeException e){return null;}
}
}
}else{cam.release();}
return null;
}
public void onPreviewFrame(byte[] data, Camera cam){
Debug.out("teste");
}
所有这些工作正常,相机显示正确
很遗憾,未调用onPreviewFrame。我已经尝试过使用setPreviewCallback和setPreviewCallbackWithBuffer做一些事情,但老实说,我不明白为什么这不起作用,因为onPreviewFrame应该在显示帧时调用。。。我已经阅读了文档,但我觉得这有点误入歧途,如果有人能让我清楚地理解它,我将不胜感激!(我试过的例子)
(…)
试一试{
cam=摄像机。打开(计数器);
参数=cam.getParameters();
参数。setPreviewFormat(16);
setPreviewCallback(onPreviewFrame);要使用的调用命令的语法
cam.setPreviewCallback(this);
从摄像机操作类内部
要进行预览回调,必须调用
cam.startPreview();
如果希望使用参数(例如更改预览格式后),则需要
cam.setParameters(parameters);
通常,您希望在开始查看()之前设置参数。我通过以下方法解决问题:
将.setPreviewCallback移到.startPreview后面
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
mCamera.setPreviewCallback(previewCallback);
我在mainactivity.java中调用了cam.startPreview();
,它工作了,帧显示正确…当我调用cam.setPreviewCallback(this);
inside togglefacecamera时,类型Camera中的方法setPreviewCallback(Camera.PreviewCallback)不适用于参数(CameraOperations)
。如果我调用setPreviewCallback(onPreviewFrame)
,我会得到“onPreviewFrame无法解析为变量”。您能告诉我应该在哪里调用它以及如何调用它吗?
cam.setParameters(parameters);
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
mCamera.setPreviewCallback(previewCallback);