安卓摄像头点击连续拍摄

时间:2013-10-22 10:54:11

标签: java android android-camera

我正在尝试进行连续拍摄3次的相机应用。

我试图通过把它放在一个循环中多次调用“takePicture”。

但没有成功。

请帮忙解决这个问题。

一点帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

你永远不应该从你的代码中拨打PictureCallback.onPictureTaken();此回调在系统就绪时从系统接收数据,作为对Camera.takePicture()的响应。

后一个调用只有在打开相机并开始预览时才会成功。因此,简单地在循环中调用Camera.takePicture()将无效(请参阅例如Android 2.3.1 Camera takePicture() Multiple images with one button click)。处理此问题的正确方法是在onPictureTaken()中处理已处理的镜头计数器,如果小于3,则重新启动相机预览并发出(同步)另一个Camera.takePicture()。在此之后,onPictureTaken()return,以允许处理下一个捕获的帧。

答案 1 :(得分:0)

我在做Photo Burst时就像这样使用它。它还处理持有预览的FRameLayout以启动Photo Burst:

PictureCallback jpegCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        FileOutputStream outStream = null;
        try {

            Parameters param = camera.getParameters();
            param.setPictureSize(640, 480);
            camera.setParameters(param);

             // Or write to sdcard
            outStream = new FileOutputStream(String.format(
                    Environment.getExternalStorageDirectory().getPath()+"/foto%d.jpg",
                    System.currentTimeMillis()));

            outStream.write(data);
            outStream.close();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,                           
                     Uri.fromFile(Environment.getExternalStorageDirectory())));

            Log.i(TAG, "onPictureTaken - wrote bytes: " + data.length);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }
        Log.d(TAG, "onPictureTaken - jpg");
        try {
            stillCount++;
            camera.startPreview();
            if (stillCount < 10) {
                preview.mCamera.takePicture(shutterCallback, rawCallback,
                        jpegCallback);
                if (stillCount == 9) {
                    frameLayout.setClickable(true);
                }
            } else {
                stillCount = 0;
                takePictureButton.setEnabled(true);
                frameLayout.setClickable(true);
            }
        } catch (Exception e) {
            Log.d(TAG, "Error starting preview: " + e.toString());
        }
    }
};  

答案 2 :(得分:0)

我得到了解决方案。

我从我的循环中调用了mCamera.startPreview();

预览必须拍摄,不包括mCamera.startPreview();阻止我执行。