我已经在窗体上用一个picturebox1显示了摄像头传来的图像(动态的),如果我点击按钮,如何能够把当前显示的图像拷贝到picturebox2中(静态的一帧就可以)。请问该如何做呢?

解决方案 »

  1.   

    你需要通过directx来截获ref:
    http://www.codeproject.com/cs/media/motion_detection_wc.asp
      

  2.   

    麻烦指点一下,你给的链接我早就看过,不太明白它的原理。
    另外,我参照csdn上另一篇文章写了一段,有一个语句如下:
    Bitmap bmp=(Bitmap)this.picCamera.Image;
    Bitmap bmp1= new Bitmap(this.picCamera.Width,this.picCamera.Height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    Graphics g=Graphics.FromImage(bmp1);
    g.DrawImage(bmp,new Rectangle(0,0,this.picCamera.Width,this.picCamera.Height),0,0,this.picCamera.Width,this.picCamera.Height,System.Drawing.GraphicsUnit.Pixel);但是取出来的bmp是空值,g.DrawImage方法执行不了,这是什么原因?
      

  3.   

    你直接通过graphics是获得不了图像的,因为图像通过directshow展现出来,这层处理不是form做的。
      

  4.   

    看你实现什么要求了,如果是视频卡,那么可以选择用directx9.0 sdk进行开发,不过需要安装运行环境,也可以用directshow进行开发,directshow在codeproject上,是一个从vc那里转化出来的类库,如果更简单一点的,比如简单的视频捕捉,你可以使用vwp,一个简单的api调用基类库,进行开发
      

  5.   

    你用directshow吧
    http://www.codeproject.com/cs/media/directshownet.asp
      

  6.   

    你可以参考QQ的图像截取,我研究了一下QQ的截取:先截取整个屏幕,并把截取的图片全屏显示出来,然后再在图片上截取想要的图片。我有一段C#相关的代码,需要的话留下邮箱。
      

  7.   

    kyle315,我已经给您短消息,请查收一下。
      

  8.   

    Knight94(愚翁) 给的链接足够解决你的问题了
    找到bin中的camserver.dll,注册成com组件,然后using一下
    private CAMSERVERLib.Camera cam = new CAMSERVERLib.CameraClass();
                       //capture first pic
    byte[] picture = (byte[])cam.GrabFrame( short.MaxValue );

    MemoryStream ms = new MemoryStream( picture );
    Bitmap bmp= new Bitmap( ms );
    bmp.Save(Application.StartupPath+"\\Wanted\\first"+saveTime);
      

  9.   

    问题已经解决。
    参考了下面的文章:
    http://www.01cn.net/cgi-bin/threaded_show.cgi?tid=2648&h=1&bpg=1&age=0