標籤:
需求:由於項目需要獲得使用者的頭像,所以需要用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
項目中使用:
【C#】#100 調用網路攝影機