1

我正在我的一个项目中使用 ARCore。我arFragment在视图中使用。从那以后,我用

arFragment.getArSceneView().getArFrame().acquireCameraImage()

它返回一个image. 此图像与片段显示中的预览不同。我认为我通过 AR 片段看到的是通过 捕获的内容acquireCameraImage,但看起来获取的图像比片段显示的部分更多,而且方向是横向的(片段显示中的纵向视图)。

我需要一个与片段显示中的预览相同的图像对象。
有没有办法得到它?

4

1 回答 1

2

正如您所写的那样——公共方法.acquireCameraImage()从相机中获取与当前帧相对应的图像:

public Image acquireCameraImage()

为了获得与片段显示中的预览相同的图像对象,只需使用:

public Frame update()

谷歌 ARCore 开发者文档

update() 方法更新ARCore系统的状态。这包括:接收新的相机帧、更新设备的位置、更新跟踪锚点的位置、更新检测到的平面等。这个调用可能会导致屏幕外的 OpenGL 活动。因此,为避免不必要的帧缓冲区刷新和重新加载,不应在渲染帧或屏幕外缓冲区的中间进行此调用。此调用可能会更新所有创建的锚点和检测到的平面的位姿。可通过 访问更新的对象集getUpdatedTrackables(Class)。阻塞模式下的这个调用(参见 Config.UpdateMode)将等到有新的相机图像可用,或者直到达到内置超时(当前66ms)。如果相机图像在内置超时时间内没有到达,则update()将返回最新的 Frame 对象。对于某些应用程序,了解是否实际获得了新帧可能很重要(例如,如果相机没有产生新帧,则避免重绘)。为此,请将通过 获得的当前帧的时间戳getTimestamp()与之前记录的帧时间戳进行比较。如果它们不同,则这是一个新框架。

于 2018-10-25T13:39:26.330 回答