【发布时间】:2018-02-01 06:36:38
【问题描述】:
所以我正在使用我在网上找到的这个库,它应该可以让我的网络摄像头与 C# 一起使用变得超级容易,所以我决定试一试。 我正在模仿的项目是使用 WPF 或 WinForms,其中有两个。 我决定我想创建一个控制台版本,现在有一些小问题,关于控制和什么,但我似乎完全可以控制我面临的问题是它出于某种原因而超出了它的逻辑未知。
这就是它应该如何流动。 (在 WPF 中也是如此)
webcam.Start(); -> webcam.Start(0); Starts the webcam here -> webcam_ImageCaptured() -> LoadBitmap() -> webcam_ImageCaptured() -> LoadBitmap() -> webcam_ImageCaptured() and loop through those last two
这就是我的工作(控制台应用程序)
webcam.Start(); -> webcam.Start(0); Starts the webcam here -> and then it steps out of webcam.Start(); and closes.
我不知道它为什么会这样,我真的很想知道,一直在调试,但我似乎真的无法解开这里的谜团。
这是控制台应用程序主要
class Program
{
static WebCam webcam;
static System.Windows.Controls.Image image = new System.Windows.Controls.Image();
[STAThread]
static void Main(string[] args)
{
webcam = new WebCam();
webcam.InitializeWebCam(ref image);
webcam.Start();
}
}
还有网络摄像头类https://ghostbin.com/paste/kvvx2
还有 Helper 类 https://ghostbin.com/paste/vk8qz
这是 WPF 应用程序的 Main
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
WebCam webcam;
private void mainFrm_Loaded(object sender, RoutedEventArgs e)
{
webcam = new WebCam();
webcam.InitializeWebCam(ref imgMain);
}
private void btnCapture_Click(object sender, RoutedEventArgs e)
{
webcam.Start();
}
}
这是我找到所有内容的原始帖子https://sites.google.com/site/webcamlibrarydotnet/wpf-and-csharp-sample-code-and-download
【问题讨论】:
-
来自您下面的评论:“它不应该退出 webcam.Start();” - 为什么不呢?在 WPF 程序中,几乎可以肯定它确实如此,即
Start()方法在被调用后不久返回。否则 UI 会冻结。那么,为什么你认为Start()方法不应该在控制台程序场景中返回呢? -
并且需要明确的是,从您迄今为止发布的所有迹象来看,这只不过是
Main()方法立即返回,导致程序退出,这是由标记的复制。如果您不这么认为,您需要改进问题,以便清楚为什么我们应该相信Start()方法应该阻止并保持程序运行。 -
@PeterDuniho 我正在并排调试它们,控制台应用程序在运行一次后关闭,而 WPF 版本没有退出,有没有办法可以使用控制台应用程序捕获帧以查看如果它甚至得到什么?
-
WPF 程序有一个事件泵送循环(对您隐藏...它在您自己的
App类隐式调用的Application.Run()方法中),它使程序保持运行。您在btnCapture_Click()方法中调用Start(),这显然是 WPF UI 中按钮上的Click事件的事件处理程序。该方法不是程序的入口点,Main()的方式是控制台程序的入口点,因此从它返回不会像在控制台程序中从Main()返回的方式那样终止 WPF 程序. -
@PeterDuniho 这解释了一些事情,我也尝试使用像
Helper.SaveImageCapture((BitmapSource)image.Source);这样的 SaveImageCapture 但这让我在encoder.Frames.Add(BitmapFrame.Create(bitmap));行出现错误,说System.ArgumentNullException: 'Value cannot be null. Parameter name: source'我很确定我投了我的image.Source 作为 BitmapSource
标签: c# .net wpf winforms webcam