我想知道我可以通过电话一个接一个地拍摄惊喜有多快(比如fx:'强制关闭;)
你们有没有人知道那个时间吗?
我知道500 milisec是安全的时间。当我尝试使用100,200,300 milisec时出现错误,但是谁知道,也许我做错了。
答案 0 :(得分:0)
除了软件问题之外,这实际上取决于您使用的设备。我只是通过自动拍摄一些固定数量的照片(如1000),对它们进行计时并找到平均时间和标准偏差来在手机上进行测试。在几个设备和模拟器上执行此操作肯定会让您了解实际需要多长时间。
答案 1 :(得分:0)
摩托罗拉droid可以拍摄30fps的视频,所以如果你需要非常快的图像,也许你可以使用MediaRecorder
答案 2 :(得分:0)
这绝对取决于你所定义的“拍照” - 正如Nathan所说,当录制视频(基本上是一系列缩小的压缩图片)时,你可以每隔30ms“拍摄”一张照片。但是,如果您将“拍照”定义为将5MP jpeg图片复制到SD卡,则可能需要更长的时间。
当你说“只做一个循环(拍摄1000张照片)”时,你必须明确地描述你的意思,尤其是当你抱怨错误时。
假设您扩展了Camera.PictureCallback
界面,在您通过图片之前会在幕后进行大量处理(比如jpeg压缩,我相信)。您是否尝试在onPictureTaken
的实施中投放一个事件来拍摄另一张照片?这可能是一种安全的方式来做和测试你想要的。否则,如果你发现大量的“拍照”事件,可能会发生某种堆溢出,我不知道。
编辑:粗略地说,这就是我的意思:
public void onPictureTaken(
final byte [] data, final android.hardware.Camera camera) {
saveDataToFile("/DCIM/tempjpeg.jpg", data);
camera.takePicture(null, null, this);
}
尽快调用takePicture - 正好在回调中!不要在没有修改的情况下使用它,因为这将永远循环。我尝试了这个,它适用于几个照片,然后只是停止响应。如果你在两张照片之后停止它,它似乎在Nexus One上花了一秒钟。希望有所帮助。
答案 3 :(得分:0)
boolean isTakingPicture = false;
public void onclick2takepic(View view) {
try {
if(!isTakingPicture) {
mCamera.takePicture(null, null, mPicture);
isTakingPicture = true;
}else{
isTakingPicture=false;
}
}catch(Exception e){
Toast.makeText(this,"cannot take picture: "+e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
private Camera.PictureCallback mPicture = new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] data, Camera camera){
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if(pictureFile==null){
Toast.makeText(getApplicationContext(),"error creating media file, check permissions",Toast.LENGTH_LONG).show();
return;
}
try{
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
}catch(FileNotFoundException e){
//Toast.makeText(this,"file not found: "+e.getMessage()).show();
}catch(IOException e){
//Toast.makeText(getApplicationContext(),"error accessing file: "+e.getMessage()).show();
}
//isTakingPicture = false;
mCamera.startPreview();
if(isTakingPicture) {
mCamera.takePicture(null, null, mPicture);
}
}
};
在此代码中有一个递归,只要isTakingPicture = true,就会重新开始预览并再次拍照; 打开和关闭预览是耗时的,所以我不能在我的旧手机上每秒获得更多的图片。 我希望能够做到这一点不是通过takePicture,因为它无法预览但没有预览,但有mediaRecorder但不知道怎么样