我有以下方法打开面向用户的相机:
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");
}
同样称为:
MainActivity.java
surface = (SurfaceView)findViewById(R.id.cameraView);
holder = surface.getHolder();
Camera cam = CameraOperations.toggleFaceCamera();
try{
cam.setPreviewDisplay(holder);
//cam.setPreviewCallback(CameraOperations.());
}catch(IOException e){
e.printStackTrace();
}
cam.startPreview();
所有这一切都很好,相机显示正确
不幸的是没有调用onPreviewFrame。我已经使用setPreviewCallback和setPreviewCallbackWithBuffer尝试了几件事,但说实话,我不明白为什么这样做不会起作用,因为onPreviewFrame应该通过显示框架来调用...我已经阅读了文档但我觉得这有点误导,如果有人能让我理解清楚,我会非常感激! (例子我试过)
(...)
try{
cam = Camera.open(counter);
parameters = cam.getParameters();
parameters.setPreviewFormat(16);
cam.setPreviewCallback(onPreviewFrame); <---- doens't recognize argument
return cam;
}catch(RuntimeException e){return null;}
(...)
答案 0 :(得分:0)
要使用的调用命令的语法
cam.setPreviewCallback(this);
来自 CameraOperations 类。
要进行预览回调,您必须致电
cam.startPreview();
如果您希望使用参数(例如,在更改预览格式后),则需要
cam.setParameters(parameters);
通常,您希望在 startPreview()
之前设置参数。
答案 1 :(得分:0)
我通过以下方式解决问题:
将.setPreviewCallback移到.startPreview后面。
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
mCamera.setPreviewCallback(previewCallback);