【问题标题】:Burst mode camera in Android which can take multiple picturesAndroid中的连拍模式相机,可以拍摄多张照片
【发布时间】:2014-04-18 07:08:05
【问题描述】:

我试图在我的应用中实现一个连拍模式相机,它可以以每秒 5-10(或更多)张快照的速度拍摄多张照片。

仅供参考,我已经看到了之前的问题hereherehere - 尝试过但很快失败了。此外,这些问题很老,没有全面的答案来解决所有问题,例如如何管理堆等。

如果有人可以提供有用的指示、最佳实践或SSCCE,我将不胜感激。

更新:

尝试以 15+snaps/sec 拉取预览帧成功,但 问题是预览大小是有限的。在nexus 5上我只能得到 1920x1080 约为 2mp,而全分辨率图片可能在 n5 是 8mp :-(

【问题讨论】:

  • 你是如何制作 15 fps 的照片的?你能提供代码吗?我遇到了同样的问题

标签: android camera


【解决方案1】:

我认为问题的很大一部分是问题:当前手机中的突发模式如何工作?一些博客指出,Google 已确认他们将添加突发模式 API。

我怀疑当前的实现是通过将曝光时间设置为最小并在循环中调用 takePicture 或使用 Camera.PreviewCallback

我在一些计算机视觉项目中使用了后者,并且碰巧考虑使用这个 API 编写一个连拍模式相机。您可以将从 Camera.PreviewCallback 收到的缓冲区存储在内存中,并在后台线程上处理它们。

如果我没记错的话,分辨率低于实际相机分辨率,所以这可能并不理想。

【讨论】:

  • 尝试以 15+snaps/sec 拉取预览帧成功,但问题是预览大小有限。在 nexus 5 上,我只能得到 1920x1080,即 ~2mp,而在 n5 上可能的全分辨率图片是 8mp :-(
  • 是的,我在回答中提到了这一点。唯一的其他选择是设置相机设置并查看它如何影响处理图像的速度,并且可能通过在循环中使用 takePicutre 使其足够快以拍摄连拍照片;这也会影响图像的质量。
  • 一些传感器确实支持突发模式,与 onPreviewFrame 分开。但是这个 API 是专有的,只有在 camera HAL v.3 中,才会尝试让设备制造商将此功能公开给 3rd 方相机应用程序。
  • @Leon 你能提供一些例子吗?我遇到了同样的问题,我找不到答案
【解决方案2】:

制造商提供的特定于设备的 API 很少,获得跨设备工作的“突发模式”的唯一方法是将预览帧用作图像。 takePicture() 无法保证您何时能够再次致电 takePicture()

【讨论】:

  • +1 - 使用 15+ fps 的预览帧尝试成功,但问题是预览大小有限。在 nexus 5 上,我只能得到 1920x1080,即 ~2mp,而在 n5 上可能的全分辨率图片是 8mp :( 有没有办法完成完整的 res pic?
  • @COD3BOY:获得全分辨率图片的唯一方法是使用takePicture(),然后您又回到了不知道多快对您安全的问题再次调用它。
  • 谢谢。那么使用 takePicture() 时最好的方法是什么?目前我正在将图像保存到内部存储(这里没有线程)并在pictureCallback 中再次调用takePicture()。目前在nexus 5上每秒给我2个快照。这是最好的方法吗?
  • @COD3BOY:据我所知,这是唯一可靠的方法。原则上,takePicture()onPictureTaken() 之间的某些时间应该用于处理可能不会干扰另一个takePicture() 调用的处理。欢迎您尝试更频繁地拨打takePicture(),在拨打onPictureTaken() 之前,但是,俗话说,您的里程可能会有所不同。 :-)
  • 谢谢,让我试试看,如果有什么问题会更新:-)
猜你喜欢
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多