网络摄像头在xna中呼叫

时间:2009-11-24 12:12:37

标签: xna webcam

我是xna的新手

我想使用我的网络摄像头并将网络摄像头图像作为3D模型的背景纹理

是否有调用网络摄像头的功能

感谢您的建议

3 个答案:

答案 0 :(得分:4)

如果您查看AForge框架,您将找到一个在网络摄像头源上进行运动检测的示例程序。

http://code.google.com/p/aforge/

此框架非常容易获取网络摄像头。

基本上结束了

VideoCaptureDevice device = new VideoCaptureDevice(monikor);
device.NewFrame += new AForge.Video.NewFrameEventHandler(webcam_NewFrame);
webcam.Start();

您可以通过调用与...类似的代码来获取网络摄像头的监视器。

FilterInfoCollection webcamList = new FilterInfoCollection(FilterCategory.VideoInputDevice);

foreach(FilterInfo info in webcamList)
{
    string monikor = info.MonikorString;
    string deviceName = info.Name;
}

这是我遇到的最好/最简单的方式来获取网络摄像头。

然后你可以将Bitmap转换为Texture2D并按你的意愿显示!

答案 1 :(得分:0)

我不久前遇到了这个问题,这是我提出的一个非常混乱的解决方案。

首先,你需要使用motion_src库,你可以在这里找到:

http://www.codeproject.com/KB/audio-video/Motion_Detection.aspx

该教程是关于运动检测的,但是如果您下载演示代码,您可以将它从摄像机捕获输入的位置。

现在,将其添加为xna项目的参考。

一旦你设置系统从摄像头捕获一个源(所有细节都在该教程中,我不会在这里重复)你需要复制源(它被捕获到System.Drawing中) .bitmap到xna纹理。

Texture2D image;

b = (System.Drawing.Bitmap)camera.LastFrame.Clone();
for (int j = 0; j < image.Height; j++)
{
    for (int i = 0; i < image.Width; i++)
    {
        c = b.GetPixel(i, j);
        colours[i + j * image.Width] = new Color(c.R, c.G, c.B, byte.MaxValue);
    }
}
image.SetData<Color>(colours);

然后,您可以使用对spritebatch的正常调用来显示图像纹理:)

答案 2 :(得分:0)

您可以使用第三方VideoTexture class。它可以使用网络摄像头或AVI,MPEG或WMV,并允许您访问Texture2D对象,将当前帧作为可与spritebatch一起使用或应用于3D对象的图像。

  
      
  1. 将VideoTexture.cs文件复制到您自己的项目中。
  2.   
  3. 将VideoTexture.cs文件中的命名空间更改为   你的项目命名空间。
  4.   
  5. 从中添加对DirectShowLib-2005.dll的引用   DirectShow.NET库。
  6.   
  7. 编译它。 VideoTexture类现在应该在您的   项目
  8.   

我从未使用它,但如果您下载文档,它应该有所帮助。它应该只是创建一个VideoTexture,并使用其VideoTexture2D属性来检索Texture2D。然后你可以将它设置为某个3D对象的每个效果的纹理。