CameraFrameSource.cs
2.52 KB
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
using System;
using System.ComponentModel.Composition;
using Touchless.Vision.Camera.Configuration;
using Touchless.Vision.Contracts;
namespace Touchless.Vision.Camera
{
[Export(typeof(IFrameSource))]
public class CameraFrameSource : IFrameSource
{
public event Action<IFrameSource, Frame, double> NewFrame;
public bool IsCapturing { get; private set; }
private Camera _camera;
public Camera Camera
{
get { return _camera; }
internal set
{
if (_camera != value)
{
bool restart = IsCapturing;
if (IsCapturing)
{
StopFrameCapture();
}
_camera = value;
if (restart)
{
StartFrameCapture();
}
}
}
}
[ImportingConstructor]
public CameraFrameSource([Import(ExportInterfaceNames.DefaultCamera)] Camera camera)
{
if (camera == null) throw new ArgumentNullException("camera");
this.Camera = camera;
}
public void StartFrameCapture()
{
if (!IsCapturing && this.Camera != null)
{
this.Camera.OnImageCaptured += OnImageCaptured;
this.Camera.StartCapture();
IsCapturing = true;
}
}
public void StopFrameCapture()
{
if (IsCapturing)
{
this.Camera.StopCapture();
this.Camera.OnImageCaptured += OnImageCaptured;
this.IsCapturing = false;
}
}
private void OnImageCaptured(object sender, CameraEventArgs e)
{
if (IsCapturing && this.NewFrame != null)
{
var frame = new Frame(e.Image);
this.NewFrame(this, frame, e.CameraFps);
}
}
public string Name
{
get { return "Touchless Camera Frame Source"; }
}
public string Description
{
get { return "Retrieves frames from Camera"; }
}
public bool HasConfiguration
{
get { return true; }
}
public System.Windows.UIElement ConfigurationElement
{
get
{
return new CameraFrameSourceConfigurationElement(this);
}
}
}
}