Camera.Preview回调不生成相机帧

时间:2011-07-15 12:00:26

标签: android

我已经创建了一个自定义的系统服务,我希望我的服务能够在没有预览的情况下在后台捕获相框。我已经按照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卡中。但我没有完成它。我在这做错了什么。需要一些帮助!

感谢提前回复。

1 个答案:

答案 0 :(得分:0)

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