Squirrowse/squirrowse.client/WebCam.cs

85 lines
1.9 KiB
C#

using System;
using System.Drawing;
using System.Threading;
using OpenCvSharp;
using OpenCvSharp.Extensions;
namespace squirrowse.client
{
public class Webcam
{
private static VideoCapture capture;
private static Mat frame;
private static Byte[] image;
private static Thread camera;
private static bool isCameraRunning;
private readonly bool imagetakinginprogress = false;
public Webcam(bool AutoActivate = true)
{
if (AutoActivate) Initalize();
}
public void Initalize()
{
CaptureCamera();
isCameraRunning = true;
}
private void CaptureCamera()
{
camera = new Thread(CaptureCameraCallback);
camera.Start();
}
private void CaptureCameraCallback()
{
Thread.Sleep(1);
if (!isCameraRunning) return;
frame = new Mat();
capture = new VideoCapture(0);
capture.Open(0);
if (!capture.IsOpened()) return;
while (isCameraRunning)
{
capture.Read(frame);
image = frame.ToBytes();
}
}
public byte[] GetBitmap()
{
if (!isCameraRunning) throw new Exception("Cannot take picutre if the camera is not initalized!");
while (imagetakinginprogress)
{
}
try
{
Thread.Sleep(100);
return image;
}
catch
{
Thread.Sleep(100);
return image;
}
}
public void Deinitialize()
{
camera.Abort();
capture.Release();
isCameraRunning = false;
}
~Webcam()
{
Deinitialize();
capture.Dispose();
frame.Dispose();
}
}
}