コード例 #1
0
  public synchronized void onNewFrame(UserTracker tracker) {
    if (mLastFrame != null) {
      mLastFrame.release();
      mLastFrame = null;
    }

    mLastFrame = mTracker.readFrame();

    // check if any new user detected
    for (UserData user : mLastFrame.getUsers()) {
      if (user.isNew()) {
        // start skeleton tracking
        mTracker.startSkeletonTracking(user.getId());
      }
    }

    VideoFrameRef depthFrame = mLastFrame.getDepthFrame();

    if (depthFrame != null) {
      ByteBuffer frameData = depthFrame.getData().order(ByteOrder.LITTLE_ENDIAN);
      ByteBuffer usersFrame = mLastFrame.getUserMap().getPixels().order(ByteOrder.LITTLE_ENDIAN);

      // make sure we have enough room
      if (mDepthPixels == null
          || mDepthPixels.length < depthFrame.getWidth() * depthFrame.getHeight()) {
        mDepthPixels = new int[depthFrame.getWidth() * depthFrame.getHeight()];
      }

      calcHist(frameData);
      frameData.rewind();

      int pos = 0;
      while (frameData.remaining() > 0) {
        short depth = frameData.getShort();
        short userId = usersFrame.getShort();
        short pixel = (short) mHistogram[depth];
        int color = 0xFFFFFFFF;
        if (userId > 0) {
          color = mColors[userId % mColors.length];
        }

        mDepthPixels[pos] = color & (0xFF000000 | (pixel << 16) | (pixel << 8) | pixel);
        pos++;
      }
    }

    repaint();
  }