所以我知道setSurface,并且将它用作覆盖或其他东西没有问题 - 它在表面控件上。也就是说,我对获取像素数据感到困惑
1)我已经尝试了所有我能想到的(控件、根等)来使用绘图缓存功能来获取相机表面的位。是的,没有。缓存的位图总是清零。
2)我已经成功地使用了 SurfaceView 和 GLSurfaceView 作为 setSurface 标记。我不能使用任何其他类,例如 TextureView。
3) 我调查了 C API,我看到相机暴露了 connectOnFrameAvailable,这将使我能够访问像素
我的猜测是内部探戈逻辑只是使用 java 中的表面来访问底层位传输通道 - 在 C API 中它需要一个纹理 ID,这让我怀疑在一天结束时,相机数据是很快就运到了 GPU,我敢打赌 CUDA lib 在它上面运行——考虑到事情的状态,我看不到如何在没有 root 设备的情况下获取 Java 端的位——只是因为我有纹理或在屏幕上渲染原始位的简单表面视图并不意味着我可以得到它们。
我不想将图像数据从 GPU 中剥离出来。为此,我需要将忙碌的动画从手表切换到日历。
在深入研究 C API 之前,有什么方法可以在 Java 中获取相机位?我真的希望能够将它们与特定的姿势相关联,但现在我什至无法弄清楚如何获得它们。我真的很想知道 3D 点的位置和颜色。我只需要相机内在函数、点云和生成点云的 2d 图像。但是,如果我无法获得像素,我将无能为力,而且图像与(姿势和点云)之间的关系越可疑,任何努力都会变得越粗略。
如果我确实潜入了 C,connectOnFrameAvailable 会给我我需要的东西吗?它与点云生成的同步程度如何?哦,我做对了吗?彩色相机用于深度,鱼眼用于姿势?
我可以混合使用 Java 和 C,即在 Java 中创建一个 Tango 实例,然后只使用 C 来解决图像问题吗?还是我将不得不重新实现 C 中的所有内容并停止使用 tango java jar ?