Java 从Kinect获取深度数据时遇到问题

Java 从Kinect获取深度数据时遇到问题,java,macos,kinect,jna,Java,Macos,Kinect,Jna,我花了一整天的时间试图从Kinect获取原始数据,但没有成功 我一直在尝试将单元测试破解成一个程序,我的Google fu让我失望——我在web上找不到任何其他使用Java/JNA/osX的Java示例 这是我一直在尝试的测试,但似乎无法找到提取帧数据的方法 @Test public void testDepth() throws InterruptedException { assumeThat(dev, is(not(nullValue()))); final Obje

我花了一整天的时间试图从Kinect获取原始数据,但没有成功

我一直在尝试将单元测试破解成一个程序,我的Google fu让我失望——我在web上找不到任何其他使用Java/JNA/osX的Java示例

这是我一直在尝试的测试,但似乎无法找到提取帧数据的方法

 @Test
 public void testDepth() throws InterruptedException {
    assumeThat(dev, is(not(nullValue())));

    final Object lock = new Object();
    final long start = System.nanoTime();
    System.out.println(dev.getDepthMode());
    //dev.startDepth(new DepthHandler(){});
    dev.startDepth(new DepthHandler() {
        int frameCount = 0;

        @Override
        public void onFrameReceived(FrameMode mode, ByteBuffer frame, int timestamp) {

            //ByteBuffer frame1 = frame;
            frameCount++;
            byte[] b = new byte[frame.remaining()];
            System.out.println(frameCount);
            System.out.println(frame.capacity());
            //System.out.println(frame.);
            if (frameCount >= 300) {
                synchronized (lock) {
                    lock.notify();
                    System.out.format("Got %d depth frames in %4.2fs%n", frameCount,
                            (((double) System.nanoTime() - start) / 1000000000));
                }
            }
        }
    });
    synchronized (lock) {
        lock.wait(20000);
    }
}  

非常感谢您的帮助。

看看这个项目:

getDepthFrame函数以可用形式提供深度数据:


如果您试图用最新版本的jna运行它,它将无法工作;onFrameReceived函数有点变化。

适用于感兴趣或面临类似问题的任何人;这与字节缓冲区以及如何从中提取int值有关。在上面的示例中,数据在bytebuffer中,但是您需要以正确的格式提取它。如果数据是C结构的形式,那么JNA可以帮助您提取它。如果它只是任意打包的数据,那么您必须根据大小和偏移量自己将其取出,JNA仍然可以帮助使用基于指针的方法。