我创建了一个自定义的系统服务,并且希望我的服务在没有预览的情况下在后台捕获相机帧。我已按照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关键字允许您捕获它)。