我正在我的一个项目中与ARCore合作。我在视图中使用arFragment
。因此,我使用
arFragment.getArSceneView().getArFrame().acquireCameraImage()
,它返回一个image
。该图像和片段显示中的预览不同。我以为通过AR片段看到的是通过acquireCameraImage
捕获的图像,但是看起来所获取的图像比片段显示的部分更多,而且方向是横向的(片段显示中的人像视图)。
我需要一个与片段显示中的预览相同的图像对象。
有什么办法吗?
答案 0 :(得分:2)
正如您正确编写的那样–公共方法.acquireCameraImage()
从相机获取与当前帧相对应的图像:
public Image acquireCameraImage()
要获得与片段显示中的预览相同的图像对象,只需使用:
public Frame update()
Google ARCore开发人员文档:
update() method更新
ARCore
系统的状态。其中包括:接收新的相机框架,更新设备的位置,更新跟踪锚的位置,更新检测到的平面等。此调用可能导致屏幕外OpenGL活动。因此,为避免不必要的帧缓冲区刷新和重新加载,不应在渲染帧或屏幕外缓冲区的中间进行此调用。该调用可以更新所有创建的锚点和检测到的平面的姿态。可通过getUpdatedTrackables(Class)
访问更新对象集。处于阻塞模式(请参阅Config.UpdateMode)的此调用将等待,直到有新的摄像机图像可用,或直到达到内置超时(当前为66ms
)为止。如果摄像机图像没有在内置超时之前到达,则update()
将返回最新的Frame对象。对于某些应用程序,重要的是要知道是否实际获得了新的帧(例如,如果相机未产生新的帧,则要避免重画)。为此,请将通过getTimestamp()
获得的当前帧的时间戳与先前记录的帧时间戳进行比较。如果它们不同,那么这是新框架。