public boolean openCamera() {
Log.i(TAG, "openCamera");
releaseCamera();
mCamera = Camera.open();
if (mCamera == null) {
Log.e(TAG, "Can't open camera!");
return false;
}
mCamera.setPreviewCallbackWithBuffer(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized (View.this) {
System.arraycopy(data, 0, mFrame[frameIndex], 0,
data.length);
View.this.notify();
}
camera.addCallbackBuffer(mBuffer);
if (frameIndex == 1) {
bufferIsSet = true;
}
frameIndex ^= 1;
}
});
return true;
}
以上是打开相机的方法。 (可以在https://github.com/sungjkang/OpticalFlow/blob/master/src/com/wais/opticalflow/View.java上找到更多代码)
它可以在使用模拟器的笔记本电脑上正常运行,但在Nexus 4上完全无法运行。
经过一番挖掘之后,我注意到我在使用手机时从未进入过onPreviewFrame,但是该方法正在我的模拟器中调用。
有人知道这是怎么回事吗?
最佳答案
我有同样的问题。主要是尺寸问题,请在下面的代码中为我工作。
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
Camera.Size cs = sizes.get(0);
parameters.setPreviewSize(cs.width, cs.height);
// parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
关于android - Nexus 4手机上没有调用onPreviewFrame…而是在模拟器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872012/