【问题标题】:android camera click continous shotsandroid相机点击连续拍摄
【发布时间】:2013-10-22 10:54:11
【问题描述】:

我正在尝试制作连续拍摄 3 张照片的相机应用程序。

我已经尝试通过循环调用“takePicture”几次。

但没有成功。

请帮忙解决这个问题。

我们将不胜感激。

【问题讨论】:

  • 之所以称为回调,是因为您不应该调用它,而是调用它。调用“拍照”。
  • 抱歉问题需要更正。

标签: java android android-camera


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我在进行 PhotoBurst 时就这样使用它。它还处理 FRameLayout 保存预览以启动 PhotoBurst:

    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());
            }
        }
    };  
    

    【讨论】:

      【解决方案3】:

      我得到了解决方案。

      我在循环中调用mCamera.startPreview();

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-28
        • 2021-01-10
        • 1970-01-01
        • 2011-07-15
        • 1970-01-01
        • 2010-12-10
        • 2015-01-03
        • 1970-01-01
        相关资源
        最近更新 更多