需求:由於項目需要獲得用戶的頭像,所以需要用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
項目中使用截圖: