在我們以前的項目了,做攝像頭的圖片採集,我們一般還是需要做一個封裝處理的,在較新版本的DevExpress控制項裡面,增加了一個CameraControl控制項,可以直接調用攝像頭顯示的,因此也可以做頭像採集等功能,本文介紹如何基於這個控制項做相關的圖像採集操作。 ...
在我們以前的項目了,做攝像頭的圖片採集,我們一般還是需要做一個封裝處理的,在較新版本的DevExpress控制項裡面,增加了一個CameraControl控制項,可以直接調用攝像頭顯示的,因此也可以做頭像採集等功能,本文介紹如何基於這個控制項做相關的圖像採集操作。
1、CameraControl控制項介紹
該控制項從15.1開始,就開始加入控制項組了,控制項的使用很簡單,直接拖動到界面就可以在Winform界面上使用了。本案例基於16.1進行開發的,因此也都具有這些控制項模塊的。
例如我們直接把CameraControl控制項拖動到界面上,然後運行界面就可以看到如下效果。
在攝像的界面上,有一個配置的選項,可以對攝像頭的解析度等參數進行設置處理。
同時在PictureEdit控制項上,也可以開啟攝像頭採集功能,只需要在控制項屬性里設置一下即可:
運行界面得到效果如下所示。
這個採集圖片的菜單項文字沒有漢化,因此有點怪異,我們也可以通過使用其內置的對話框(TakePictureDialog )進行圖片採集操作。
具體代碼如下所示:
private void btnInternal_Click(object sender, EventArgs e) { TakePictureDialog d = new TakePictureDialog(); if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.pictureEdit1.Image = d.Image; } }
調用得到的對話框是內置的,界面也是無法修改調整,包括文字內容。
2、自定義採集對話框
為了更好的實現對頭像的採集操作,我們可以仿照這個對話框模塊,做一個自定義的窗體,實現攝像頭圖像的採集操作,如下所示。
同時我們在對話框窗體裡面設置一個Public的圖像對象屬性,如下所示
/// <summary> /// 採集圖片 /// </summary> public Image CameraImage { get; set; }
這樣我們就方便設置和提取圖像信息了。
捕獲圖像的代碼就是從攝像控制項裡面獲取一個快照就可以了,如下所示。
private void btnCapture_Click(object sender, EventArgs e) { this.CameraImage = this.cameraControl1.TakeSnapshot(); this.pictureEdit1.Image = this.CameraImage; }
然後在窗體退出的時候,記得釋放攝像頭的資源,否則第二次就提示占用,無法使用了。
private void FrmCamera_FormClosing(object sender, FormClosingEventArgs e) { this.cameraControl1.Dispose(); }
整個對話框的完整代碼如下所示。
public partial class FrmCamera : Form { /// <summary> /// 採集圖片 /// </summary> public Image CameraImage { get; set; } public FrmCamera() { InitializeComponent(); } private void btnOK_Click(object sender, EventArgs e) { this.DialogResult = System.Windows.Forms.DialogResult.OK; } private void btnCapture_Click(object sender, EventArgs e) { this.CameraImage = this.cameraControl1.TakeSnapshot(); this.pictureEdit1.Image = this.CameraImage; } private void FrmCamera_FormClosing(object sender, FormClosingEventArgs e) { this.cameraControl1.Dispose(); } }
最後運行可以得到界面如下所示。
這種處理方式比較好,我在該控制項出來之前,在基礎界面類庫裡面,使用肖像控制項來處理攝像頭圖像採集的,如在我博客介紹《Winform開發框架之肖像顯示保存控制項的實現》所示。
例如在會員管理系統裡面,就是利用肖像管理控制項,通過之前的攝像頭公用類庫實現的圖形採集操作的。
這裡其實是利用一個攝像頭類庫來實現的,不過現在既然DevExpress本身就提供控制項支持,那麼我們也可以直接利用它了,這樣更加方便,更少代碼。