Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="imageFrame"></param>
        private void SensorColorFrameReadyHandler(ColorImageFrame imageFrame)
        {
            byte[] pixelData = new byte[imageFrame.PixelDataLength];
            imageFrame.CopyPixelDataTo(pixelData);

            ColorDataPacket packet = new ColorDataPacket(pixelData,
                                                         imageFrame.Width,
                                                         imageFrame.Height,
                                                         imageFrame.BytesPerPixel);

            this.ModelDelegate.OnColorDataPacketReady(packet);
        }
Example #2
0
        /// <summary>
        /// helper method which uses <see cref="System.Threading.Tasks.Task"/> in order to process <see cref="Bspline.Core.DataPacket.ColorDataPacket"/> data into a <see cref="System.Drawing.Bitmap"/> asynchronously
        /// </summary>
        /// <param name="packet">data to convert</param>
        /// <returns></returns>
        private async Task <Bitmap> RenderAsync(ColorDataPacket packet)
        {
            return(await Task.Run(() =>
            {
                Bitmap bitmap = new Bitmap(packet.Width, packet.Height, SysDrawImage.PixelFormat.Format32bppRgb);

                BitmapData bitmapData = bitmap.LockBits(
                    new Rectangle(0, 0, packet.Width, packet.Height),
                    ImageLockMode.WriteOnly, bitmap.PixelFormat);

                IntPtr ptr = bitmapData.Scan0;
                Marshal.Copy(packet.PixelData, 0, ptr, packet.PixelData.Length);

                bitmap.UnlockBits(bitmapData);
                packet.Dispose();

                return bitmap;
            }));
        }
Example #3
0
        /// <summary>
        /// Async method to handle video data packet and produce video bitmap
        /// </summary>
        /// <param name="packet"></param>
        internal override async void UpdateVideoStream(ColorDataPacket packet)
        {
            if (this.IsDisposed)
            {
                return;
            }

            try
            {
                Bitmap result = await this.BitmapHelper.Render(packet);

                this.PostToUiThread(() =>
                {
                    if (!this.IsDisposed && this.IsMediaStreaming)
                    {
                        this.VideoImageSource = this.BitmapHelper.ToBitmapSource(result);
                    }
                });
            }
            catch (TaskCanceledException)
            {
            }
        }
Example #4
0
 /// <summary>
 /// <see cref="Bspline.Core.Interfaces.IModelDelegate"/>
 /// </summary>
 /// <param name="packet">holds video information</param>
 public void OnColorDataPacketReady(ColorDataPacket packet)
 {
     this.ModelDelegate.OnColorDataPacketReady(packet);
 }
Example #5
0
 /// <summary>
 /// Transformes <see cref="Bspline.Core.DataPacket.ColorDataPacket"/> data into a <see cref="System.Drawing.Bitmap"/> asynchronously
 /// </summary>
 /// <param name="packet">data to transform</param>
 /// <returns></returns>
 public async Task <Bitmap> Render(ColorDataPacket packet)
 {
     return(await this.RenderAsync(packet));
 }
 /// <summary>
 /// <see cref="IModelDelegate"/>
 /// </summary>
 public void OnColorDataPacketReady(ColorDataPacket packet)
 {
     this.ModelViewCollection.ForEach(mv => mv.UpdateVideoStream(packet));
 }
 /// <summary>
 /// Update upon video stream
 /// </summary>
 /// <param name="packet">image data</param>
 internal virtual void UpdateVideoStream(ColorDataPacket packet)
 {
 }