// 描画 private unsafe void xnDraw() { // カメライメージの更新を待ち、画像データを取得する context.WaitOneUpdateAll(image); ImageMetaData imageMD = image.GetMetaData(); Graphics g; // カメラ画像の作成 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(); for (int i = 0; i < imageMD.DataSize; i += 3, src += 3, dst += 3) { dst[0] = src[2]; dst[1] = src[1]; dst[2] = src[0]; } bitmap.UnlockBits(data); // 手の軌跡を描画 if (handPoints.Count != 0) { Point3D start = depth.ConvertRealWorldToProjective(handPoints.Peek()); foreach (Point3D handPoint in handPoints) { Point3D pt = depth.ConvertRealWorldToProjective(handPoint); g = Graphics.FromImage(bitmap); g.DrawLine(pen, start.X, start.Y, pt.X, pt.Y); start = pt; } // 先頭要素を削除 if (handPoints.Count > MAX_POINT) { handPoints.Dequeue(); } } } // 現在の状態を表示する g = Graphics.FromImage(bitmap); string message = "Gesture:RaiseHand" + ", Status:" + gestureStatus.ToString() + "\n" + "Hand:" + handStates.ToString(); g.DrawString(message, font, brush, point); }
public void SetStatus(HandStatus status) { m_PlayerStatus.gameObject.SetActive(true); Color statusColor = Color.black; switch (status) { case HandStatus.WIN: statusColor = Color.green; break; case HandStatus.BJ: statusColor = Color.yellow; break; case HandStatus.LOSE: case HandStatus.BUST: statusColor = Color.red; break; } m_PlayerStatus.color = statusColor; m_PlayerStatus.text = status.ToString(); }