相机takePicture并不总是根据图片大小进行jpeg回调

时间:2014-01-23 16:09:38

标签: android callback android-camera resolution

我遇到了问题,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上测试。

2 个答案:

答案 0 :(得分:1)

在启动camera.takePicture()之前,您无法再次致电jpegCallback.onPictureTaken(),因此您需要限制button.onClick()。如果您始终将相机保持在预览模式,则可以减少延迟。

答案 1 :(得分:0)

编辑:关闭相机对象可能已收集垃圾。我创建了它的静态引用,现在它没有问题。