• C# 调取摄像头 +拍照


    1.添加引用

    using System.Windows.Media.Imaging;
    using AForge;
    using AForge.Controls;
    using AForge.Video;
    using AForge.Video.DirectShow;
    using Size = System.Drawing.Size;


    2.连接摄像头

        //连接摄像头
            private void CameraConn()
            {
                VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);
                videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);
                videoSource.DesiredFrameRate = 1;
    
                videoSourcePlayer.VideoSource = videoSource;
                videoSourcePlayer.Start();
            }

    3.关闭摄像头

     private void btnClose_Click(object sender, EventArgs e)
            {
                videoSourcePlayer.SignalToStop();
                videoSourcePlayer.WaitForStop();
            }

    4.截图

            private void Photograph_Click(object sender, EventArgs e)
            {
                try
                {
                    if (videoSourcePlayer.IsRunning)
                    {
                        BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                                        videoSourcePlayer.GetCurrentVideoFrame().GetHbitmap(),
                                        IntPtr.Zero,
                                         Int32Rect.Empty,
                                        BitmapSizeOptions.FromEmptyOptions());
                        PngBitmapEncoder pE = new PngBitmapEncoder();
                        pE.Frames.Add(BitmapFrame.Create(bitmapSource));
                        string picName = GetImagePath() + "\" + "xiaosy" + ".jpg";
                        if (File.Exists(picName))
                        {
                            File.Delete(picName);
                        }
                        using (Stream stream = File.Create(picName))
                        {
                            pE.Save(stream);
                        }
                        //拍照完成后关摄像头并刷新同时关窗体
                        if (videoSourcePlayer != null && videoSourcePlayer.IsRunning)
                        {
                            videoSourcePlayer.SignalToStop();
                            videoSourcePlayer.WaitForStop();
                        }
                        
                        this.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("摄像头异常:" + ex.Message);
                }
            }
    
            private string GetImagePath()
            {
                string personImgPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)
                             + Path.DirectorySeparatorChar.ToString() + "PersonImg";
                if (!Directory.Exists(personImgPath))
                {
                    Directory.CreateDirectory(personImgPath);
                }
    
                return personImgPath;
            }

    摘自:百度    谢谢

  • 相关阅读:
    图像处理之理解卷积
    图像卷积与滤波的一些知识点
    利用SynchronizationContext.Current在线程间同步上下文
    C#基础之 --- 消息队列例子
    c#子线程与主线程之间的通信
    映美精相机软触发
    halcon例程学习笔记(11) 一维码、二维码识别
    C#的分布式消息队列介绍
    相似、仿射、射影变换区别
    配置管理
  • 原文地址:https://www.cnblogs.com/hanke123/p/6605789.html
Copyright © 2020-2023  润新知