我创建了一个自定义的系统服务,并且希望我的服务在没有预览的情况下在后台捕获相机帧。我已按照developer.android网站中的步骤进行操作,并实现了以下代码,但未生成任何框架。这是代码:

 public void startCapture() {

//Start The camera
int openCamera = 0;//default camera to be opened
mCamera = Camera.open(openCamera);
Camera.Parameters p = mCamera.getParameters();
setPreviewSize(p.getPreviewSize());//method to get Camera size
mCamera.getParameters().setPreviewFpsRange(1, 2);
try{
    Camera.PreviewCallback mPreviewCallback = new Camera.PreviewCallback()
    {

    @Override

    public void onPreviewFrame(byte[] data, Camera camera) {

    //  public void cameraPreview(byte[] data, Camera camera) {

    // TODO Auto-generated method stub

    decodeYUV420SP(rgb, data, width, height);//method for processing the image

    bitmap.setPixels(rgb, 0, width, 0, 0, width, height);

    String newFolder = "/Pictures";

    String extStorageDirectory = Environment.getExternalStorageDirectory().toString();

    File myNewFolder = new File(extStorageDirectory + newFolder);

    if (!myNewFolder.exists())

        myNewFolder.mkdir();



    File file = new File(path, "/Pictures/Frame-"+count+".jpg");

    boolean fileCreated = file.createNewFile();

    FileOutputStream out = new FileOutputStream(file);

    bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);

    out.flush();

    out.close();
    };

}catch (Exception e)
 {

       e.printStackTrace();

 }
}
mCamera.setPreviewCallback(mPreviewCallback);
mCamera.startPreview();
}


我希望将这些帧捕获并存储在提及路径中的SD卡中。但是我没有完成。我在这里做错了什么。需要一些帮助!

感谢预先的回复者。

最佳答案

我有一个类似的问题。您需要与视图的“ holder”对象同步,锁定画布,处理框架,然后再次解锁画布。我认为问题在于预览数据在回调中返回并一并绘制到屏幕上(synchronization关键字允许您捕获它)。

07-28 12:57