我遇到了问题,camera.takePicture()
jpeg回调在所需图片大小较高的情况下被频繁调用。例如。它总是以640x480成功,但仅适用于5%到40%的情况,并且具有3264x2448分辨率的微小参数调整。
相关代码:
public void foo(View view) {
Camera.PictureCallback jpegCallback = new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
camera.release();
Toast.makeText(SurvCamActivity.getInstance(), "jpeg callback", Toast.LENGTH_SHORT).show();
}
};
//Gets desired resolution
SpinnerResolution res = getSelectedSpinnerResolution();
Camera camera = getCameraInstance();
try {
Camera.Parameters params = camera.getParameters();
params.setPictureSize(res.width, res.height);
camera.setParameters(params);
camera.setPreviewTexture(new SurfaceTexture(R.layout.fragment_preview));
camera.startPreview();
camera.takePicture(null, null, jpegCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
现在奇怪的是,如果我将断点添加到camera.takePicture()
并且一旦线程到达那里就恢复执行它总是调用jpeg回调。当我在Thread.sleep(700)
之后添加camera.takePicture()
时,它也开始不断地进行回调。有任何想法吗?在Nexus 4上测试。
答案 0 :(得分:1)
在启动camera.takePicture()
之前,您无法再次致电jpegCallback.onPictureTaken()
,因此您需要限制button.onClick()
。如果您始终将相机保持在预览模式,则可以减少延迟。
答案 1 :(得分:0)
编辑:关闭相机对象可能已收集垃圾。我创建了它的静态引用,现在它没有问题。