/// <summary> /// 距離データをカラー画像に変換する /// </summary> /// <param name="depthFrame"></param> /// <returns></returns> private static byte[] ConvertDepthToColor(DepthImageFrame depthFrame) { // 距離カメラのピクセルごとのデータを取得する short[] depthPixel = depthFrame.ToPixelData(); // 画像化データを作成する byte[] depthColor = new byte[depthFrame.Width * depthFrame.Height * BytesPerPixel]; // 画像化する for (int i = 0; i < depthPixel.Length; i++) { // 距離カメラのデータから、距離とプレイヤーIDを取得する int distance = depthPixel[i] >> DepthImageFrame.PlayerIndexBitmaskWidth; int player = depthPixel[i] & DepthImageFrame.PlayerIndexBitmask; // バイトインデックスを計算する int index = i * BytesPerPixel; byte gray = (byte)~(byte)KinectUtility.ScaleTo(distance, 0x0FFF, 0xFF); depthColor[index + 0] = gray; depthColor[index + 1] = gray; depthColor[index + 2] = gray; } return(depthColor); }
/// <summary> /// 距離データをカラー画像に変換する /// </summary> /// <param name="depthFrame"></param> /// <returns></returns> private static byte[] ConvertDepthToColor(DepthImageFrame depthFrame, KinectSensor kinect) { // 距離カメラのピクセルごとのデータを取得する short[] depthPixel = depthFrame.ToPixelData(); // 画像化データを作成する byte[] depthColor = new byte[depthFrame.Width * depthFrame.Height * BytesPerPixel]; var colorPoints = new ColorImagePoint[kinect.ColorStream.FrameWidth * kinect.ColorStream.FrameHeight]; kinect.CoordinateMapper.MapDepthFrameToColorFrame(kinect.DepthStream.Format, depthFrame.ToDepthImagePixel(), kinect.ColorStream.Format, colorPoints ); // 画像化する for (int i = 0; i < depthPixel.Length; i++) { // 距離カメラのデータから、距離とプレイヤーIDを取得する int distance = depthPixel[i] >> DepthImageFrame.PlayerIndexBitmaskWidth; int player = depthPixel[i] & DepthImageFrame.PlayerIndexBitmask; // バイトインデックスを計算する int index = (colorPoints[i].Y * kinect.ColorStream.FrameWidth + colorPoints[i].X) * BytesPerPixel; byte gray = (byte)~(byte)KinectUtility.ScaleTo(distance, 0x0FFF, 0xFF); depthColor[index + 0] = gray; depthColor[index + 1] = gray; depthColor[index + 2] = gray; } return(depthColor); }
/// <summary> /// スケルトン(3D)座標を2D座標に変換する /// </summary> /// <param name="position"></param> /// <returns></returns> private Point SkeletonToPiont(SkeletonPoint position) { Point point; Point _2d; if (SkeletonConvert == Skeleton2DPoint.Color) { var p = mapper.MapSkeletonPointToColorPoint(position, kinect.ColorStream.Format); point = new Point(p.X, p.Y); _2d = new Point(kinect.ColorStream.FrameWidth, kinect.ColorStream.FrameHeight); } else { var p = mapper.MapSkeletonPointToDepthPoint(position, kinect.DepthStream.Format); point = new Point(p.X, p.Y); _2d = new Point(kinect.DepthStream.FrameWidth, kinect.DepthStream.FrameHeight); } return(KinectUtility.ScaleTo(point, _2d, new Point(canvas.ActualWidth, canvas.ActualHeight))); }