protected override bool InitTexture(out Texture2D refText, out int xSize, out int ySize)
 {
     NIOpenNICheckVersion.Instance.ValidatePrerequisite();
     if (base.InitTexture(out refText, out xSize, out ySize) == false)
     {
         return(false);
     }
     // make sure we have an image to work with
     if (m_context.UserSkeletonValid == false)
     {
         m_context.m_Logger.Log("Invalid users node", NIEventLogger.Categories.Initialization, NIEventLogger.Sources.Skeleton, NIEventLogger.VerboseLevel.Errors);
         return(false);
     }
     if (m_factor <= 0)
     {
         m_context.m_Logger.Log("Illegal factor", NIEventLogger.Categories.Initialization, NIEventLogger.Sources.Skeleton, NIEventLogger.VerboseLevel.Errors);
         return(false);
     }
     // initialize the meta data object...
     m_metaData = m_context.UserGenrator.UserNode.GetUserPixels(0);
     // update the resolution by the factor
     ySize = m_metaData.YRes / m_factor;
     xSize = m_metaData.XRes / m_factor;
     // create the texture
     refText = new Texture2D(xSize, ySize, TextureFormat.RGB24, false);
     // create a new meta data object.
     return(true);
 }
 public bool ContentEquals(SceneMetaData other)
 {
     return(Name == other.Name &&
            Path == other.Path &&
            BuildIndex == other.BuildIndex &&
            AssetGuid == other.AssetGuid);
 }
	protected override bool InitTexture(out Texture2D refText, out int xSize, out int ySize)
    {
        NIOpenNICheckVersion.Instance.ValidatePrerequisite();
        if (base.InitTexture(out refText, out xSize, out ySize) == false)
            return false;
        // make sure we have an image to work with
        if(m_context.UserSkeletonValid==false)
        {
            m_context.m_Logger.Log("Invalid users node", NIEventLogger.Categories.Initialization, NIEventLogger.Sources.Skeleton, NIEventLogger.VerboseLevel.Errors);
            return false;
        }
        if(m_factor<=0)
        {
            m_context.m_Logger.Log("Illegal factor", NIEventLogger.Categories.Initialization, NIEventLogger.Sources.Skeleton, NIEventLogger.VerboseLevel.Errors);
            return false;
        }
        // initialize the meta data object...
        m_metaData=m_context.UserGenrator.UserNode.GetUserPixels(0);
        // update the resolution by the factor
        ySize = m_metaData.YRes / m_factor;
        xSize = m_metaData.XRes / m_factor;
        // create the texture
        refText = new Texture2D(xSize, ySize, TextureFormat.RGB24, false);
        // create a new meta data object.
        return true;
	}
        // 描画
        private unsafe void xnDraw()
        {
            // カメライメージの更新を待ち、画像データを取得する
            context.WaitOneUpdateAll(image);
            ImageMetaData imageMD = image.GetMetaData();
            SceneMetaData sceneMD = user.GetUserPixels(0);

            // カメラ画像の作成
            lock (this) {
                // 書き込み用のビットマップデータを作成
                Rectangle  rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
                BitmapData data = bitmap.LockBits(rect, ImageLockMode.WriteOnly,
                                                  System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                // 生データへのポインタを取得
                byte *  dst   = (byte *)data.Scan0.ToPointer();
                byte *  src   = (byte *)image.ImageMapPtr.ToPointer();
                ushort *label = (ushort *)sceneMD.LabelMapPtr.ToPointer();

                for (int i = 0; i < imageMD.DataSize; i += 3, src += 3, dst += 3, ++label)
                {
                    dst[0] = (byte)(src[2] * colors[*label, 0]);
                    dst[1] = (byte)(src[1] * colors[*label, 1]);
                    dst[2] = (byte)(src[0] * colors[*label, 2]);
                }

                bitmap.UnlockBits(data);


                // 現在の状態を表示する
                Graphics g = Graphics.FromImage(bitmap);
                g.DrawString(message, font, brush, point);
            }
        }
    //int testPixel=-1;

    protected override bool InitTexture(out Texture2D refText, out int xSize, out int ySize)
    {
        UNIOpenNICheckVersion.Instance.ValidatePrerequisite();
        if (base.InitTexture(out refText, out xSize, out ySize) == false)
        {
            return(false);
        }
        if (m_settingManager.UserSkeletonValid == false)
        {
            m_settingManager.m_logger.Log("Invalid users node", UNIEventLogger.Categories.Initialization, UNIEventLogger.Sources.Skeleton, UNIEventLogger.VerboseLevel.Errors);
            return(false);
        }
        if (m_factor <= 0)
        {
            m_settingManager.m_logger.Log("Illegal factor", UNIEventLogger.Categories.Initialization, UNIEventLogger.Sources.Skeleton, UNIEventLogger.VerboseLevel.Errors);
            return(false);
        }
        m_metaData = m_settingManager.UserGenerator.UserNode.GetUserPixels(0);

        xSize = m_metaData.XRes / m_factor;
        ySize = m_metaData.YRes / m_factor;

        refText = new Texture2D(xSize, ySize, TextureFormat.RGB24, false);

        return(true);
    }
Esempio n. 6
0
    public int WhichUserDoesThisPointBelongTo(Point3D point)
    {
        // get userID of user to whom the hand is attached
        Point3D       ProjectiveHandPoint = depthGenerator.ConvertRealWorldToProjective(point);
        SceneMetaData sceneMD             = userGenerator.GetUserPixels(0);

        return(sceneMD[(int)ProjectiveHandPoint.X, (int)ProjectiveHandPoint.Y]);
    }
Esempio n. 7
0
        public void Paint(SceneMetaData sceneMeta, WriteableBitmap b)
        {
            b.Lock();

            unsafe
            {
                short* pLabelRow = (short*)sceneMeta.SceneMapPtr;

                int nTexMapX = b.BackBufferStride;
                byte* pTexRow = (byte*)b.BackBuffer + sceneMeta.YOffset * nTexMapX;

                for (int y = 0; y < sceneMeta.YRes; y++)
                {
                    short* pLabel = pLabelRow;
                    byte* pTex = pTexRow + sceneMeta.XOffset;

                    for (int x = 0; x < sceneMeta.XRes; x++)
                    {
                        //var label = sceneMeta.GetLabel((uint) x, (uint) y);
                        var label = (*pLabel);
                        if (label != 0)
                        {
                            var c = _colors[label%_colors.Length];
                            pTex[0] = c.B;  // B
                            pTex[1] = c.G;  // G
                            pTex[2] = c.R;  // R
                            pTex[3] = c.A;  // A
                        }
                        else
                        {
                            pTex[0] = 0;  // B
                            pTex[1] = 0;  // G
                            pTex[2] = 0;  // R
                            pTex[3] = 0;  // A
                        }
                        pLabel++;
                        pTex += 4;
                    }
                    pLabelRow += sceneMeta.XRes;
                    pTexRow += nTexMapX;
                }
            }
            b.AddDirtyRect(new Int32Rect(0, 0, b.PixelWidth, b.PixelHeight));
            b.Unlock();
        }
        // 描画
        private unsafe void xnDraw()
        {
            // カメライメージの更新を待ち、画像データを取得する
            context.WaitOneUpdateAll(image);
            ImageMetaData imageMD = image.GetMetaData();
            SceneMetaData sceneMD = user.GetUserPixels(0);

            // カメラ画像の作成
            lock (this) {
                // 書き込み用のビットマップデータを作成
                Rectangle  rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
                BitmapData data = bitmap.LockBits(rect, ImageLockMode.WriteOnly,
                                                  System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                // 生データへのポインタを取得
                byte *  dst   = (byte *)data.Scan0.ToPointer();
                byte *  src   = (byte *)image.ImageMapPtr.ToPointer();
                ushort *label = (ushort *)sceneMD.LabelMapPtr.ToPointer();

                // 画面用の描画
                for (int i = 0; i < imageMD.DataSize; i += 3, src += 3, dst += 3, ++label)
                {
                    // 背景描画が有効か、ユーザーがいる場合、カメラ画像を描画する
                    if (isBackground || (*label != 0))
                    {
                        dst[0] = src[2];
                        dst[1] = src[1];
                        dst[2] = src[0];
                    }
                    // その他の場合は描画しない
                    else
                    {
                        dst[0] = 255;
                        dst[1] = 255;
                        dst[2] = 255;
                    }
                }

                bitmap.UnlockBits(data);
            }
        }
Esempio n. 9
0
 public void Update(SceneMetaData sceneMeta)
 {
 }
Esempio n. 10
0
        public SceneMetaData GetUserPixels(UserID id)
        {
            SceneMetaData smd = new SceneMetaData();
            using (IMarshaler marsh = smd.GetMarshaler(true))
            {
                UInt32 status = OpenNIImporter.xnGetUserPixels(this.InternalObject, id, marsh.Native);
                WrapperUtils.CheckStatus(status);
            }

            return smd;
        }
Esempio n. 11
0
        public SceneMetaData GetUserPixels(UserID id)
        {
            SceneMetaData smd = new SceneMetaData();
            using (IMarshaler marsh = smd.GetMarshaler(true))
            {
                int status = SafeNativeMethods.xnGetUserPixels(this.InternalObject, id, marsh.Native);
                WrapperUtils.ThrowOnError(status);
            }

            return smd;
        }
Esempio n. 12
0
        private static void CopyWritableBitmap(SceneMetaData imageMd, WriteableBitmap b)
        {
            IntPtr data = imageMd.SceneMapPtr;

            CopyWritableBitmap(imageMd, data, b);
        }
Esempio n. 13
0
        // 描画
        private unsafe void xnDraw()
        {
            // カメライメージの更新を待ち、画像データを取得する
            context.WaitOneUpdateAll(image);
            ImageMetaData imageMD = image.GetMetaData();
            SceneMetaData sceneMD = user.GetUserPixels(0);

            // カメラ画像の作成
            lock (this) {
                // 書き込み用のビットマップデータを作成
                Rectangle  rect = new Rectangle(0, 0, this.bitmap.Width, this.bitmap.Height);
                BitmapData data = bitmap.LockBits(rect, ImageLockMode.WriteOnly,
                                                  System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                // 背景のビットマップデータを作成
                BitmapData back = background.LockBits(rect, ImageLockMode.ReadWrite,
                                                      System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                // 生データへのポインタを取得
                byte *  dst   = (byte *)data.Scan0.ToPointer();
                byte *  bk    = (byte *)back.Scan0.ToPointer();
                byte *  src   = (byte *)image.ImageMapPtr.ToPointer();
                ushort *label = (ushort *)sceneMD.LabelMapPtr.ToPointer();

                // 背景の更新
                if (isBackgroundRefresh)
                {
                    isBackgroundRefresh = false;

                    for (int i = 0; i < imageMD.DataSize; i += 3, src += 3, bk += 3)
                    {
                        bk[0] = src[2];
                        bk[1] = src[1];
                        bk[2] = src[0];
                    }

                    bk  = (byte *)back.Scan0.ToPointer();
                    src = (byte *)image.ImageMapPtr.ToPointer();
                }

                // 画面用の描画
                for (int i = 0; i < imageMD.DataSize;
                     i += 3, src += 3, dst += 3, bk += 3, ++label)
                {
                    // 光学迷彩が有効で、ユーザーがいる場合、背景を描画する
                    if (isCamouflage && (*label != 0))
                    {
                        dst[0] = bk[0];
                        dst[1] = bk[1];
                        dst[2] = bk[2];
                    }
                    // ユーザーではないので、カメラ画像を描画する
                    else
                    {
                        dst[0] = src[2];
                        dst[1] = src[1];
                        dst[2] = src[0];
                    }
                }

                bitmap.UnlockBits(data);
                background.UnlockBits(back);
            }
        }
Esempio n. 14
0
        // 描画
        private unsafe void xnDraw()
        {
            // カメライメージの更新を待ち、画像データを取得する
            context.WaitOneUpdateAll(image);
            ImageMetaData imageMD = image.GetMetaData();
            SceneMetaData sceneMD = user.GetUserPixels(0);

            // カメラ画像の作成
            lock (this) {
                // 書き込み用のビットマップデータを作成
                Rectangle  rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
                BitmapData data = bitmap.LockBits(rect, ImageLockMode.WriteOnly,
                                                  System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                // 生データへのポインタを取得
                byte *  dst   = (byte *)data.Scan0.ToPointer();
                byte *  src   = (byte *)image.ImageMapPtr.ToPointer();
                ushort *label = (ushort *)sceneMD.LabelMapPtr.ToPointer();

                for (int i = 0; i < imageMD.DataSize; i += 3, src += 3, dst += 3, ++label)
                {
                    dst[0] = (byte)(src[2] * colors[*label, 0]);
                    dst[1] = (byte)(src[1] * colors[*label, 1]);
                    dst[2] = (byte)(src[0] * colors[*label, 2]);
                }

                bitmap.UnlockBits(data);

                // スケルトンの描画
                foreach (int id in user.GetUsers())
                {
                    // トラッキング対象のユーザーでなければ次へ
                    if (!user.SkeletonCapability.IsTracking(id))
                    {
                        continue;
                    }

                    DrawLine(id, SkeletonJoint.Head, SkeletonJoint.Neck);

                    DrawLine(id, SkeletonJoint.Neck, SkeletonJoint.LeftShoulder);
                    DrawLine(id, SkeletonJoint.LeftShoulder, SkeletonJoint.LeftElbow);
                    DrawLine(id, SkeletonJoint.LeftElbow, SkeletonJoint.LeftHand);

                    DrawLine(id, SkeletonJoint.Neck, SkeletonJoint.RightShoulder);
                    DrawLine(id, SkeletonJoint.RightShoulder, SkeletonJoint.RightElbow);
                    DrawLine(id, SkeletonJoint.RightElbow, SkeletonJoint.RightHand);

                    DrawLine(id, SkeletonJoint.LeftShoulder, SkeletonJoint.Torso);
                    DrawLine(id, SkeletonJoint.RightShoulder, SkeletonJoint.Torso);

                    DrawLine(id, SkeletonJoint.Torso, SkeletonJoint.LeftHip);
                    DrawLine(id, SkeletonJoint.LeftHip, SkeletonJoint.LeftKnee);
                    DrawLine(id, SkeletonJoint.LeftKnee, SkeletonJoint.LeftFoot);

                    DrawLine(id, SkeletonJoint.Torso, SkeletonJoint.RightHip);
                    DrawLine(id, SkeletonJoint.RightHip, SkeletonJoint.RightKnee);
                    DrawLine(id, SkeletonJoint.RightKnee, SkeletonJoint.RightFoot);

                    DrawLine(id, SkeletonJoint.LeftHip, SkeletonJoint.RightHip);
                }


                // 現在の状態を表示する
                Graphics g = Graphics.FromImage(bitmap);
                g.DrawString(message, font, brush, point);
            }
        }