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); }
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]); }
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); } }
public void Update(SceneMetaData sceneMeta) { }
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; }
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; }
private static void CopyWritableBitmap(SceneMetaData imageMd, WriteableBitmap b) { IntPtr data = imageMd.SceneMapPtr; CopyWritableBitmap(imageMd, data, b); }
// 描画 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); } }
// 描画 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); } }