代码实现调用摄像头拍照
初始化摄像头:
csharp
bool isConnectSuccess = false;
private VideoCaptureDevice videoDevice;
public FilterInfoCollection videoDevices;
public VideoCaptureDevice videoSource;
public void LoadCamera()
{
if (videoDevice != null && videoDevice.IsRunning)
{
videoDevice.SignalToStop();
videoDevice.WaitForStop();
if (videoDevice != null)
{
videoDevice.Stop();
}
}
// FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
// 获取可用的视频设备
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (videoDevices.Count > 0)
{
MotionRealPlay.BackgroundImageLayout = ImageLayout.Stretch;
if (videoDevices.Count >= 1)
{
//// 选择第CameraNumber个摄像头
FilterInfo firstDevice = videoDevices[0];
videoDevice = new VideoCaptureDevice(firstDevice.MonikerString);
videoDevice.NewFrame += new NewFrameEventHandler(VideoDevice_NewFrame);
videoDevice.Start();
//方法二
// 缩放控制条
// TrackBar1 = new TrackBar { Dock = DockStyle.Bottom, Minimum = 10, Maximum = 200, Value = 100 };
// TrackBar1.ValueChanged += (s, e) => zoomFactor_width = TrackBar1.Value;
// TrackBar2.ValueChanged += (s, e) => zoomFactor_height = TrackBar2.Value;
// Controls.Add(TrackBar1);
// 绑定帧事件
//videoSource.NewFrame += (s, e) =>
//{
// // 应用缩放
// var resized = ResizeImage(e.Frame, zoomFactor);
// MotionRealPlay.Invoke((Action)(() => MotionRealPlay.Image = resized));
//};
//videoSource.Start();
// FormClosing += (s, e) => videoSource.Stop();
isConnectSuccess = true;
}
else
{
//// 选择第一个摄像头
MessageBox.Show("未找到摄像头设备!", "提示");
}
}
else
{
MessageBox.Show("未找到摄像头设备!", "提示");
}
}
string filePath = "";
Bitmap image = null;
private void VideoDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
// 在这里处理摄像头的视频流数据,例如显示在PictureBox控件中
image = (Bitmap)eventArgs.Frame.Clone();
if (this.IsHandleCreated)
{
this.BeginInvoke(new EventHandler(delegate
{
if (MotionRealPlay.Visible == true)
{
MotionRealPlay.BackgroundImage = image;
// txt_phone.Text = "width:" + zoomFactor_width;
// txt_attend.Text = "height:" + zoomFactor_height;
//if (zoomFactor_width > 1)
//{
// var resized = ResizeImage((Bitmap)eventArgs.Frame.Clone(), zoomFactor_width, zoomFactor_height);
// MotionRealPlay.BeginInvoke((Action)(() => MotionRealPlay.Image = resized));
//}
// 根据缩放因子生成缩放后的图像
//using (Bitmap scaledImage = ResizeImage((Bitmap)eventArgs.Frame.Clone(), zoomFactor))
//{
// MotionRealPlay.BackgroundImage = image;
// //picBoxCamera.Image?.Dispose(); // 释放旧图像资源
// //picBoxCamera.Image = scaledImage;
// //videoDevice.
//}
}
}));
}
// 延迟1秒
Thread.Sleep(10);
}
实现拍照显示并且保存
csharp
try
{
if ( string.IsNullOrEmpty(Txt_Name.Text))
{
MessageBox.Show("请先输入人员姓名再拍照!", "提示");
return;
}
if (isConnectSuccess == false)
{
// AddTextToRichTextBox1("未连接摄像头设备!", Color.Red);
MessageBox.Show("未连接摄像头设备!", "提示");
}
if (this.IsHandleCreated)
{
this.BeginInvoke(new EventHandler(delegate
{
if (image != null)
{
try
{
// Bitmap bitmap1 = image;
// Bitmap bm = new Bitmap(image, 400, 600);
// Bitmap bm = new Bitmap(image);
// 指定照片的保存路径
//string fileName = "Capture_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
string fileName = Txt_Name.Text + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
filePath = @"Images\\" + fileName;
// 保存照片
//image.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
//image.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
// PictureBox_PeoplePhoto.BackgroundImage = System.Drawing.Image.FromFile(filePath);
Txt_Img.Text = fileName;
// bm.Dispose();
// image.Dispose();
// Bitmap bm = (Bitmap)eventArgs.Frame.Clone();//640*480
//方法二
// Bitmap bitmap1 = image.Clone(new Rectangle(((image.Width - image.Height) / 2) + 20, 10, image.Height - 20, image.Height - 20), PixelFormat.DontCare);//裁切图片
Bitmap bitmap1 = new Bitmap(image, 400, 600);
PictureBox_PeoplePhoto.Image = bitmap1;
bitmap1.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception ex)
{
AddTextToRichTextBox1("拍照有误:" + ex.ToString(), Color.Red);
MessageBox.Show("拍照有误!", "提示");
return;
}
}
}));
}
}
catch (Exception ex)
{
WriteTxt("拍照有误:" + ex.ToString());
MessageBox.Show("拍照有误!", "提示");
}