Beispiel #1
0
        /// <summary>
        /// Update background removed color frame.
        /// </summary>
        /// <param name="frame">The input frame.</param>
        public void UpdateBackgroundRemovedColorFrame(BackgroundRemovedColorFrame frame)
        {
            if (frame == null)
            {
                throw new ArgumentNullException("frame");
            }

            this.timestamp       = frame.Timestamp;
            this.width           = frame.Width;
            this.height          = frame.Height;
            this.bufferLength    = frame.PixelDataLength;
            this.trackedPlayerId = frame.TrackedPlayerId;
            this.averageDepth    = frame.AverageDepth;

            if ((this.Buffer == null) || (this.Buffer.Length != this.bufferLength))
            {
                this.Buffer = new byte[this.bufferLength];
            }

            unsafe
            {
                fixed(byte *messageDataPtr = this.Buffer)
                {
                    fixed(byte *frameDataPtr = frame.GetRawPixelData())
                    {
                        byte *messageDataPixelPtr = messageDataPtr;
                        byte *frameDataPixelPtr   = frameDataPtr;

                        byte *messageDataPixelPtrEnd = messageDataPixelPtr + this.bufferLength;

                        while (messageDataPixelPtr != messageDataPixelPtrEnd)
                        {
                            // Convert from BGRA to RGBA format
                            *(messageDataPixelPtr++) = *(frameDataPixelPtr + 2);
                            *(messageDataPixelPtr++) = *(frameDataPixelPtr + 1);
                            *(messageDataPixelPtr++) = *frameDataPixelPtr;
                            *(messageDataPixelPtr++) = *(frameDataPixelPtr + 3);

                            frameDataPixelPtr += BytesPerPixel;
                        }
                    }
                }
            }
        }