Пример #1
0
        // Save raw debug frame to dump dir, and the following metadata:
        //    Frame timestamp in micros
        //    Face detection status
        //    sensorID , led , projector
        public void DumpRawImage(rsid.PreviewImage image)
        {
            string filename;
            var    timestamp_available = image.metadata.timestamp != 0;
            var    prefix = timestamp_available ? $"timestamp_{image.metadata.timestamp}" : $"frame_{image.number}";

            if (timestamp_available)
            {
                uint status       = image.metadata.status;
                var  sensorStr    = (image.metadata.sensor_id != 0) ? "right" : "left";
                var  ledStr       = (image.metadata.led) ? "led_on" : "led_off";
                var  projectorStr = (image.metadata.projector) ? "projector_on" : "projector_off";
                filename = $"{prefix}_status_{status}_{sensorStr}_{projectorStr}_{ledStr}{Raw10Extension}";
            }
            else // metadata isn't valid
            {
                filename = $"{prefix}{Raw10Extension}";
            }

            var byteArray = new Byte[image.size];

            Marshal.Copy(image.buffer, byteArray, 0, image.size);

            var fullPath = Path.Combine(_dumpDir, filename);

            using (var fs = new FileStream(fullPath, FileMode.Create, FileAccess.Write))
            {
                fs.Write(byteArray, 0, byteArray.Length);
            }
            // clean old dumps every 100 frames
            if (image.number % 100 == 0)
            {
                CleanOldDumps(MaxFrameAge);
            }
        }
Пример #2
0
        // Handle preview callback.
        private void OnPreview(rsid.PreviewImage image, IntPtr ctx)
        {
            if (image.height < 2)
            {
                return;
            }
            Dispatcher.Invoke(() =>
            {
                var targetWidth  = (int)PreviewImage.Width;
                var targetHeight = (int)PreviewImage.Height;

                //creae writable bitmap if not exists or if image size changed
                if (_previewBitmap == null || targetWidth != image.width || targetHeight != image.height)
                {
                    PreviewImage.Width  = image.width;
                    PreviewImage.Height = image.height;
                    Console.WriteLine($"Creating new WriteableBitmap preview buffer {image.width}x{image.height}");
                    _previewBitmap          = new WriteableBitmap(image.width, image.height, 96, 96, PixelFormats.Bgr24, null);
                    PreviewImage.Source     = _previewBitmap;
                    LabelPreview.Visibility = Visibility.Collapsed; // Hide preview placeholder once we have first frame
                }

                Int32Rect sourceRect = new Int32Rect(0, 0, image.width, image.height);
                _previewBitmap.WritePixels(sourceRect, image.buffer, image.size, image.stride);
            }, DispatcherPriority.Render);
        }
Пример #3
0
 public void DumpPreviewImage(rsid.PreviewImage image)
 {
     using (var bmp = new Bitmap(image.width, image.height, image.stride, System.Drawing.Imaging.PixelFormat.Format24bppRgb, image.buffer))
     {
         var bmpSrc = ToBitmapSource(bmp);
         var timestamp_available = image.metadata.timestamp != 0;
         var filename            = timestamp_available ? $"timestamp_{image.metadata.timestamp}" : $"frame_{image.number}";
         var fullPath            = Path.Combine(_dumpDir, filename + ImageExtension);
         DumpBitmapImage(bmpSrc, image.metadata, fullPath);
     }
     // clean old dumps and mark algo images every 900 frames (~1/min on 15 fps)
     if (image.number % 900 == 0)
     {
         CleanOldDumps(MaxFrameAge);
     }
 }