Intel.RealSense摄像头显示 winform

最终效果:

 

 

 1.下载安装SDK,得到Intel.RealSense.dll    https://github.com/IntelRealSense/librealsense/releases      Intel® RealSense™ SDK 2.0 (v2.49.0)

 

 

using Intel.RealSense;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.Remoting.Contexts;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media.Imaging;
using System.Windows.Threading;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        Intel.RealSense.Context cxt = new Intel.RealSense.Context();
        Device device = null;   // 选择的Intel Realsense相机
        private Pipeline pipeline = new Pipeline();

        private CancellationTokenSource tokenSource_gua = new CancellationTokenSource();

        private delegate void SetRealSenceVedio(Bitmap bitmap);
        public Form1()
        {
            InitializeComponent();
            //tokenSource_gua = new CancellationTokenSource();
            CheckForIllegalCrossThreadCalls = false;
        }

        private void open_Click(object sender, EventArgs e)
        {
            cmbbox_camDev.Text = string.Empty;
            cmbbox_camDev.Items.Clear();

            foreach (var device in cxt.Devices)
            {
                cmbbox_camDev.Items.Add(device.Info.GetInfo(CameraInfo.SerialNumber));
            }           
        }

        private void pBox_vedio_Click(object sender, EventArgs e)
        {

        }

        private void btn_try_Click(object sender, EventArgs e)
        {
            tokenSource_gua = new CancellationTokenSource();
            foreach (var dev in cxt.Devices)
            {
                if (dev.Info.GetInfo(CameraInfo.SerialNumber) == cmbbox_camDev.Text)
                {
                    device = dev;
                }
            }

            if (device == null)
            {
                MessageBox.Show("找不到对应的Realsense相机!");
                return;
            }

            var cfg = new Config();
            cfg.EnableStream(Intel.RealSense.Stream.Color, 1280, 720, Format.Bgr8, 30);

            var selection = pipeline.Start(cfg);

            System.Threading.Tasks.Task.Factory.StartNew(() =>
            {
                while (!tokenSource_gua.Token.IsCancellationRequested)
                {
                    #region 显示帧的时候必须使用using,否则提示Frame didn't arrived within 5000,Frame没得到.net正确释放造成的。//
                    using (var frames = pipeline.WaitForFrames())
                    {
                        VideoFrame frame = frames.ColorFrame.DisposeWith(frames);
                        //Format24bppRgb 色差(指定格式为每像素 24 位;红色、绿色和蓝色分量各使用 8 位。跟 cfg.EnableStream(Format.Rgb8)相关)
                        Bitmap newBitmap = new Bitmap(frame.Width, frame.Height, frame.Stride, PixelFormat.Format24bppRgb, frame.Data);
                        Bitmap bitmap2 = new Bitmap(newBitmap);
                        newBitmap.Dispose();
                        Console.WriteLine("s: {0}", frame.Number);

                        Dispatcher.CurrentDispatcher.Invoke(new SetRealSenceVedio(SetRealSenceValue), bitmap2);
                    }
                    #endregion                        
                }
                pipeline.Stop();
            }, tokenSource_gua.Token);
        }

        private void btn_close_Click(object sender, EventArgs e)
        {
            tokenSource_gua?.Cancel();
        }


        private void SetRealSenceValue(Bitmap bitmap)
        {
            this.pBox_vedio.Image = bitmap;
        }
    }
}

  

posted @ 2021-09-10 13:35  _守一  阅读(653)  评论(0编辑  收藏  举报