本文實例為大家分享了c#使用aforge調(diào)用攝像頭拍照的具體代碼,供大家參考,具體內(nèi)容如下
一、新建一個winform項目
二、使用nuget添加引用
安裝下圖中紅色框住的兩個程序包
安裝完后發(fā)現(xiàn)安裝了如下圖的程序包,這是因為上述兩個程序包存在對其它程序包的依賴。
三、編寫程序
1.窗體設(shè)計,攝像頭是下拉列表(cmbcamera,控件命名,下同),雖然示例只用到一個攝像頭,但是該demo可用于多個攝像頭間切換場景,分辨率是下拉列表(cmbresolution),列出攝像頭所支持的分辨率,一個videosourceplayer控件(vispshoot),一個picturebox控件(picbpreview)。
2.編寫代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
using system; using system.collections.generic; using system.componentmodel; using system.data; using system.drawing; using system.linq; using system.text; using system.windows.forms; using aforge.video.directshow; namespace aforgedemo { public partial class form1 : form { private filterinfocollection videodevices; private videocapturedevice videodevice; private videocapabilities[] videocapabilities; private videocapabilities[] snapshotcapabilities; public form1() { initializecomponent(); } private void form1_load( object sender, eventargs e) { videodevices = new filterinfocollection(filtercategory.videoinputdevice); if (videodevices.count != 0) { foreach (filterinfo device in videodevices) { cmbcamera.items.add(device.name); } } else { cmbcamera.items.add( "沒有找到攝像頭" ); } cmbcamera.selectedindex = 0; } private void cmbcamera_selectedindexchanged( object sender, eventargs e) { if (videodevices.count != 0) { videodevice = new videocapturedevice(videodevices[cmbcamera.selectedindex].monikerstring); getdeviceresolution(videodevice); } } private void getdeviceresolution(videocapturedevice videocapturedevice) { cmbresolution.items.clear(); videocapabilities = videocapturedevice.videocapabilities; foreach (videocapabilities capabilty in videocapabilities) { cmbresolution.items.add($ "{capabilty.framesize.width} x {capabilty.framesize.height}" ); } cmbresolution.selectedindex = 0; } private void btnconnect_click( object sender, eventargs e) { if (videodevice != null ) { if ((videocapabilities != null ) && (videocapabilities.length != 0)) { videodevice.videoresolution = videocapabilities[cmbresolution.selectedindex]; vispshoot.videosource = videodevice; vispshoot.start(); enablecontrolstatus( false ); } } } private void enablecontrolstatus( bool status) { cmbcamera.enabled = status; cmbresolution.enabled = status; btnconnect.enabled = status; btnshoot.enabled = !status; btndisconnect.enabled = !status; } private void btndisconnect_click( object sender, eventargs e) { disconnect(); enablecontrolstatus( true ); } private void disconnect() { if (vispshoot.videosource != null ) { vispshoot.signaltostop(); vispshoot.waitforstop(); vispshoot.videosource = null ; } } private void btnshoot_click( object sender, eventargs e) { bitmap img = vispshoot.getcurrentvideoframe(); picbpreview.image = img; } private void form1_formclosing( object sender, formclosingeventargs e) { disconnect(); } } } |
3.測試
附上窗體設(shè)計代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
namespace aforgedemo { partial class form1 { /// <summary> /// 必需的設(shè)計器變量。 /// </summary> private system .componentmodel.icontainer components = null; /// <summary> /// 清理所有正在使用的資源。 /// </summary> /// <param name="disposing">如果應(yīng)釋放托管資源,為 true;否則為 false。</param> protected override void dispose( bool disposing) { if (disposing && (components != null)) { components.dispose(); } base.dispose(disposing); } #region windows 窗體設(shè)計器生成的代碼 /// <summary> /// 設(shè)計器支持所需的方法 - 不要修改 /// 使用代碼編輯器修改此方法的內(nèi)容。 /// </summary> private void initializecomponent() { this .label1 = new system .windows.forms.label(); this .cmbcamera = new system .windows.forms.combobox(); this .label2 = new system .windows.forms.label(); this .cmbresolution = new system .windows.forms.combobox(); this .vispshoot = new aforge.controls.videosourceplayer(); this .picbpreview = new system .windows.forms.picturebox(); this .btnconnect = new system .windows.forms.button(); this .btndisconnect = new system .windows.forms.button(); this .btnshoot = new system .windows.forms.button(); (( system .componentmodel.isupportinitialize)( this .picbpreview)).begininit(); this .suspendlayout(); // // label1 // this .label1.autosize = true ; this .label1.location = new system .drawing.point(39, 22); this .label1.name = "label1" ; this .label1.size = new system .drawing.size(53, 12); this .label1.tabindex = 0; this .label1.text = "攝像頭:" ; // // cmbcamera // this .cmbcamera.formattingenabled = true ; this .cmbcamera.location = new system .drawing.point(98, 19); this .cmbcamera.name = "cmbcamera" ; this .cmbcamera.size = new system .drawing.size(113, 20); this .cmbcamera.tabindex = 1; this .cmbcamera.selectedindexchanged += new system .eventhandler( this .cmbcamera_selectedindexchanged); // // label2 // this .label2.autosize = true ; this .label2.location = new system .drawing.point(217, 22); this .label2.name = "label2" ; this .label2.size = new system .drawing.size(53, 12); this .label2.tabindex = 0; this .label2.text = "分辨率:" ; // // cmbresolution // this .cmbresolution.formattingenabled = true ; this .cmbresolution.location = new system .drawing.point(276, 19); this .cmbresolution.name = "cmbresolution" ; this .cmbresolution.size = new system .drawing.size(88, 20); this .cmbresolution.tabindex = 1; // // vispshoot // this .vispshoot.location = new system .drawing.point(41, 54); this .vispshoot.name = "vispshoot" ; this .vispshoot.size = new system .drawing.size(591, 332); this .vispshoot.tabindex = 2; this .vispshoot.text = "videosourceplayer1" ; this .vispshoot.videosource = null; // // picbpreview // this .picbpreview.location = new system .drawing.point(41, 423); this .picbpreview.name = "picbpreview" ; this .picbpreview.size = new system .drawing.size(180, 175); this .picbpreview.sizemode = system .windows.forms.pictureboxsizemode.zoom; this .picbpreview.tabindex = 3; this .picbpreview.tabstop = false ; // // btnconnect // this .btnconnect.location = new system .drawing.point(382, 19); this .btnconnect.name = "btnconnect" ; this .btnconnect.size = new system .drawing.size(80, 23); this .btnconnect.tabindex = 4; this .btnconnect.text = "連接" ; this .btnconnect.usevisualstylebackcolor = true ; this .btnconnect.click += new system .eventhandler( this .btnconnect_click); // // btndisconnect // this .btndisconnect.enabled = false ; this .btndisconnect.location = new system .drawing.point(468, 19); this .btndisconnect.name = "btndisconnect" ; this .btndisconnect.size = new system .drawing.size(80, 23); this .btndisconnect.tabindex = 4; this .btndisconnect.text = "斷開" ; this .btndisconnect.usevisualstylebackcolor = true ; this .btndisconnect.click += new system .eventhandler( this .btndisconnect_click); // // btnshoot // this .btnshoot.enabled = false ; this .btnshoot.location = new system .drawing.point(552, 19); this .btnshoot.name = "btnshoot" ; this .btnshoot.size = new system .drawing.size(80, 23); this .btnshoot.tabindex = 4; this .btnshoot.text = "拍照" ; this .btnshoot.usevisualstylebackcolor = true ; this .btnshoot.click += new system .eventhandler( this .btnshoot_click); // // form1 // this .autoscaledimensions = new system .drawing.sizef(6f, 12f); this .autoscalemode = system .windows.forms.autoscalemode.font; this .clientsize = new system .drawing.size(677, 610); this .controls.add( this .btnshoot); this .controls.add( this .btndisconnect); this .controls.add( this .btnconnect); this .controls.add( this .picbpreview); this .controls.add( this .vispshoot); this .controls.add( this .cmbresolution); this .controls.add( this .cmbcamera); this .controls.add( this .label2); this .controls.add( this .label1); this .name = "form1" ; this .text = "form1" ; this .formclosing += new system .windows.forms.formclosingeventhandler( this .form1_formclosing); this .load += new system .eventhandler( this .form1_load); (( system .componentmodel.isupportinitialize)( this .picbpreview)).endinit(); this .resumelayout( false ); this .performlayout(); } #endregion private system .windows.forms.label label1; private system .windows.forms.combobox cmbcamera; private system .windows.forms.label label2; private system .windows.forms.combobox cmbresolution; private aforge.controls.videosourceplayer vispshoot; private system .windows.forms.picturebox picbpreview; private system .windows.forms.button btnconnect; private system .windows.forms.button btndisconnect; private system .windows.forms.button btnshoot; } } |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://www.cnblogs.com/godbell/archive/2018/10/01/9734443.html