我想用C#或aspx调优笔记本上的摄像头,怎么做,源码,或实例,多谢!!!

解决方案 »

  1.   

    可能实现的途径:flash,ActiveX,sliverlight很久没了解了,不知道3.0有没有这个功力。
    纯粹aspx或者c#,都搞不定这个需求。
      

  2.   

    using System;
    using System.Runtime.InteropServices;
    using System.Drawing.Imaging; 
    using System.Windows.Forms;
    using System.Drawing;
    namespace YHhotel.YHhotelWindows
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    public class video
    {
      //5个传入参数
      private IntPtr myHand;
      private int myWidth;
      private short myHeight;
      private int myLeft;
      private int myTop;
      //调用avicap32.dll 
      public   struct   videohdr_tag   
      {   
       public byte[] lpData;   
       public int dwBufferLength;   
       public int dwBytesUsed;   
       public int dwTimeCaptured;   
       public int dwUser;   
       public int dwFlags;   
       public int[] dwReserved;     
        
      }
      [DllImport("avicap32.dll",CharSet=CharSet.Ansi,   SetLastError=true,   ExactSpelling=true)]   
      public   static   extern   int   capCreateCaptureWindowA([MarshalAs(UnmanagedType.VBByRefStr)]   ref   string   lpszWindowName,   int   dwStyle,   int   x,   int   y,   int   nWidth,   short   nHeight,   int   hWndParent,   int   nID);   
      [DllImport("avicap32.dll",   CharSet=CharSet.Ansi,   SetLastError=true,   ExactSpelling=true)]   
      public   static   extern   bool   capGetDriverDescriptionA(short   wDriver,   [MarshalAs(UnmanagedType.VBByRefStr)]   ref   string   lpszName,   int   cbName,   [MarshalAs(UnmanagedType.VBByRefStr)]   ref   string   lpszVer,   int   cbVer);   
      [DllImport("user32",   CharSet=CharSet.Ansi,   SetLastError=true,   ExactSpelling=true)]   
      public   static   extern   bool   DestroyWindow(int   hndw);   
      [DllImport("user32",   EntryPoint="SendMessageA",   CharSet=CharSet.Ansi,   SetLastError=true,   ExactSpelling=true)]   
      public   static   extern   int   SendMessage(int   hwnd,   int   wMsg,   int   wParam,   [MarshalAs(UnmanagedType.AsAny)]   object   lParam);   
      [DllImport("user32",   CharSet=CharSet.Ansi,   SetLastError=true,   ExactSpelling=true)]   
      public   static   extern   int   SetWindowPos(int   hwnd,   int   hWndInsertAfter,   int   x,   int   y,   int   cx,   int   cy,   int   wFlags);   
      [DllImport("vfw32.dll")]   
      public   static   extern   string   capVideoStreamCallback(int   hwnd,videohdr_tag   videohdr_tag);   
      [DllImport("vicap32.dll",   CharSet=CharSet.Ansi,   SetLastError=true,   ExactSpelling=true)]   
      public   static   extern   bool   capSetCallbackOnFrame(int   hwnd,string   s); 
      //自定义参数:
      private int hHwnd;
      //构造函数
      public video(IntPtr myPtr,int left, int top, int width, short height)
      {
       myHand=myPtr;
       myLeft=left;
       myTop=top;
       myWidth=width;
       myHeight=height;
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }
            
            //打开视频:
      public void opVideo()
      {
       int intDevice=0;
       string refDevice=intDevice.ToString();
       hHwnd=capCreateCaptureWindowA(ref   refDevice,1342177280,0,0,640,480,myHand.ToInt32(),0); 
       if(SendMessage(hHwnd,0x40a,intDevice,0)>0)   
       {   
        SendMessage(this.hHwnd,0x435,-1,0);   
        SendMessage(this.hHwnd,0x434,0x42,0);   
        SendMessage(this.hHwnd,0x432,-1,0);   
        SetWindowPos(this.hHwnd,1,0,0,myWidth,Convert.ToInt32(myHeight),6);     
       }
       else   
       {   
        DestroyWindow(this.hHwnd);   
       }   
      }
      //停止视频
      public void CloVideo()
      {
       SendMessage(this.hHwnd,0x40b,0,0);   
       DestroyWindow(this.hHwnd);   
      }
      //捕获视频
      public Image CatchVideo()
      {
       SendMessage(this.hHwnd,0x41e,0,0);   
       IDataObject obj1=Clipboard.GetDataObject();
       Image getIma=null;
       if(obj1.GetDataPresent(typeof(Bitmap)))   
       {   
        Image image1=(Image)obj1.GetData(typeof(Bitmap));    
                    getIma=image1;
       }
       return getIma;
      }
    }