Tôi đang cố gắng viết một ứng dụng có thể truy cập vào máy ảnh được kết nối với PC, quay video và tải hình ảnh từ video. Tôi sử dụng thư viện AForge.NET để truy cập máy ảnh: http://www.aforgenet.com/framework/Tải Ảnh từ Video
Tôi không biết sự kiện có tên AForge.Video.NewFrameEventHandler hoạt động như thế nào. Trong mã này, sự kiện trả về null thành bitmap thay vì một khung mới từ video hoặc sự kiện không được gọi. Tôi muốn lấy khung hình từ video đến một hộp hình ảnh mỗi khung thời gian để làm một cái gì đó giống như một dòng video và sau khi nhấp vào nút dừng Tôi muốn hình ảnh cuối cùng được hiển thị trong hộp hình ảnh. Có ai biết làm thế nào? Và tại sao mã của tôi không hoạt động?
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AForge.Video.DirectShow;
using System.Drawing;
using AForge.Video;
namespace CameraDevice
{
public class CameraImaging
{
// enumerate video devices
public FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
//camera
public VideoCaptureDevice videoSource;
//screen shot
public Bitmap bitmap;
public CameraImaging()
{
// create video source
VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);
// set NewFrame event handler
videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
}
public void StartVideo(VideoCaptureDevice videoSource)
{
// start the video source
videoSource.Start();
// ...
}
public void StopVideo(VideoCaptureDevice videoSource)
{
// stop the video source
videoSource.Stop();
// ...
}
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
// get new frame
bitmap = eventArgs.Frame;
// process the frame
}
}
}
Mã tương tự là ở đây: http://www.aforgenet.com/framework/features/directshow_video.html[ ^]
Trong Windows Forms tôi chạy video này trong một chủ đề mà không phương pháp này:
private void VideoRecording()
{
camImg.videoSource.Start();
while (!StopVideo)
{
pictureBox1.Image = camImg.bitmap;
pictureBox1.Invalidate();
}
camImg.videoSource.Stop();
}
AForge.NET sử dụng API DirectShow gốc để truy cập phần cứng quay video.Bạn có thể muốn xem thư viện [DirectShow.NET] (http://directshownet.sourceforge.net/) thay vào đó là "cầu nối" được sử dụng rộng rãi nhất giữa các ứng dụng .NET và các API bắt hình. –