程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 【C#】#100 調用攝像頭,

【C#】#100 調用攝像頭,

編輯:C#入門知識

【C#】#100 調用攝像頭,


需求:由於項目需要獲得用戶的頭像,所以需要用C#調用攝像頭獲取頭像。

下面寫一個調用攝像頭的方法

案例:調用攝像頭的一個DEMO【效果圖】

使用的類庫:AForge.dll   【Demo下載,Demo裡面有類庫】

1、檢測電腦上的攝像頭設備

FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

 

用Count判斷攝像頭設備的個數,如果沒有攝像頭,則拋出異常【自行處理異常】,有攝像頭,則添加到下拉框中

if (videoDevices.Count == 0)
           throw new ApplicationException();

 foreach (FilterInfo device in videoDevices)
 {
           tscbxCameras.Items.Add(device.Name);
 }

 

2、連接攝像頭

檢測到攝像頭,就可以開始連接攝像頭,獲取圖像啦。

//選擇下拉框中的一個攝像頭設備
 VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);
           
 //設置獲取顯示圖像框的大小
 videoSource.DesiredFrameSize = new Size(320, 240);
 videoSource.DesiredFrameRate = 1;
            
 //為攝像頭控件設置攝像頭獲取的圖片
videPlayer.VideoSource = videoSource;
 //開啟攝像頭
videPlayer.Start();

 

3、關閉攝像頭【也可以用 Stop() 方法關閉】

videPlayer.SignalToStop();
videPlayer.WaitForStop();

 

 

Demo運行截圖:


項目中,多了一個截圖:把攝像頭上的圖片繪制下來

 img = new Bitmap(102, 126, PixelFormat.Format24bppRgb); //設置圖片的大小,位數
 videPlayer.DrawToBitmap((Bitmap)img, new Rectangle(0, 0, videPlayer.Width, videPlayer.Height));  //繪制圖像到Img對象
 videPicture.Image = img;   //顯示到PictureBox控件上

 

在這裡遇到過一個問題,那就是 GDI+一般性錯誤【原因:資源占用】

遇到問題的情況:

     1、修改人員信息的時候,先從本地讀取圖片文件,賦值到PictureBox上。

    2、保存的時候會再把PictureBox的圖片保存到本地硬盤中。

解決辦法: 【解除圖片資源占用即可】

1、把本地圖片讀取出來,深復制一份

2、把深復制的那一份賦值到PictureBox

3、關閉本地圖片資源的關閉

#region 深復制圖片,並且關閉資源,防止出現占用
 //圖片的深復制,並且關閉占用圖片文件的資源
 img = new Bitmap(path);
 Image bmp = new Bitmap(img.Width, img.Height);
 Graphics draw = Graphics.FromImage(bmp);
 draw.DrawImage(img, 0, 0);
 draw.Dispose();
 img.Dispose();
 videPicture.Image = bmp;
#endregion

項目中使用截圖:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved