请问asp.net怎样实现摄像头在线拍照啊?

时间:2021-03-14 13:30:29
csdn上看到过用c#的代码,我新建了WEB窗体,然后把代码加进去,出现好多错误:

 "文件中的类都不能进行设计,因此未能为该文件显示设计器。"
"WebForm1.aspx.cs(192): 应输入 class、delegate、enum、interface 或 struct


不懂是什么意思,请高人指点啊

18 个解决方案

#1



using   System;   
  using   System.Drawing;   
  using   System.Collections;   
  using   System.ComponentModel;   
  using   System.Windows.Forms;   
  using   System.Data;   
  using   System.Runtime.InteropServices;   
  using   System.Drawing.Imaging;   
    
  namespace   CapTureMovie   
  {   
  ///   <summary>   
  ///   Form1   的摘要说明。   
  ///   </summary>   
  public   class   Form1   :   System.Windows.Forms.Form   
  {   
  private   System.Windows.Forms.Button   BtnCapTure;   
  private   System.Windows.Forms.Panel   panel_Vedio;   
  private   int   hHwnd;   
  private   System.Windows.Forms.Button   BtnStop;   
  private   System.Windows.Forms.Label   LbSysMsg;   
  private   System.Windows.Forms.Button   button1;   
    
  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;     
    
  }   
  public   delegate   bool   CallBack(int   hwnd,   int   lParam);     
  ///   <summary>   
  ///   必需的设计器变量。   
  ///   </summary>   
  private   System.ComponentModel.Container   components   =   null;   
  [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);   
    

#2


接到上面:
 public   Form1()   
  {   
  //   
  //   Windows   窗体设计器支持所必需的   
  //   
  InitializeComponent();   
    
  //   
  //   TODO:   在   InitializeComponent   调用后添加任何构造函数代码   
  //   
  }   
    
  ///   <summary>   
  ///   清理所有正在使用的资源。   
  ///   </summary>   
  protected   override   void   Dispose(   bool   disposing   )   
  {   
  if(   disposing   )   
  {   
  if   (components   !=   null)     
  {   
  components.Dispose();   
  }   
  }   
  base.Dispose(   disposing   );   
  }   
    
  #region   Windows   窗体设计器生成的代码   
  ///   <summary>   
  ///   设计器支持所需的方法   -   不要使用代码编辑器修改   
  ///   此方法的内容。   
  ///   </summary>   
  private   void   InitializeComponent()   
  {   
  System.Resources.ResourceManager   resources   =   new   System.Resources.ResourceManager(typeof(Form1));   
  this.panel_Vedio   =   new   System.Windows.Forms.Panel();   
  this.BtnCapTure   =   new   System.Windows.Forms.Button();   
  this.BtnStop   =   new   System.Windows.Forms.Button();   
  this.LbSysMsg   =   new   System.Windows.Forms.Label();   
  this.button1   =   new   System.Windows.Forms.Button();   
  this.SuspendLayout();   
  //     
  //   panel_Vedio   
  //     
  this.panel_Vedio.BackgroundImage   =   ((System.Drawing.Image)(resources.GetObject("panel_Vedio.BackgroundImage")));   
  this.panel_Vedio.BorderStyle   =   System.Windows.Forms.BorderStyle.Fixed3D;   
  this.panel_Vedio.Location   =   new   System.Drawing.Point(8,   16);   
  this.panel_Vedio.Name   =   "panel_Vedio";   
  this.panel_Vedio.Size   =   new   System.Drawing.Size(288,   224);   
  this.panel_Vedio.TabIndex   =   0;   
  //     
  //   BtnCapTure   
  //     
  this.BtnCapTure.Location   =   new   System.Drawing.Point(24,   256);   
  this.BtnCapTure.Name   =   "BtnCapTure";   
  this.BtnCapTure.TabIndex   =   1;   
  this.BtnCapTure.Text   =   "图象采集";   
  this.BtnCapTure.Click   +=   new   System.EventHandler(this.BtnCapTure_Click);   
  //     
  //   BtnStop   
  //     
  this.BtnStop.Enabled   =   false;   
  this.BtnStop.Location   =   new   System.Drawing.Point(136,   256);   
  this.BtnStop.Name   =   "BtnStop";   
  this.BtnStop.TabIndex   =   1;   
  this.BtnStop.Text   =   "停止采集";   
  this.BtnStop.Click   +=   new   System.EventHandler(this.BtnStop_Click);   
  //     
  //   LbSysMsg   
  //     
  this.LbSysMsg.Location   =   new   System.Drawing.Point(16,   296);   
  this.LbSysMsg.Name   =   "LbSysMsg";   
  this.LbSysMsg.Size   =   new   System.Drawing.Size(240,   23);   
  this.LbSysMsg.TabIndex   =   2;   
  //     
  //   button1   
  //     
  this.button1.Location   =   new   System.Drawing.Point(304,   48);   
  this.button1.Name   =   "button1";   
  this.button1.TabIndex   =   3;   
  this.button1.Text   =   "button1";   
  this.button1.Click   +=   new   System.EventHandler(this.button1_Click);   
  //     
  //   Form1   
  //     
  this.AutoScaleBaseSize   =   new   System.Drawing.Size(6,   14);   
  this.ClientSize   =   new   System.Drawing.Size(400,   357);   
  this.Controls.Add(this.button1);   
  this.Controls.Add(this.LbSysMsg);   
  this.Controls.Add(this.BtnCapTure);   
  this.Controls.Add(this.panel_Vedio);   
  this.Controls.Add(this.BtnStop);   
  this.Name   =   "Form1";   
  this.Text   =   "Form1";   
  this.ResumeLayout(false);   
    
  }   
  #endregion   
    
  ///   <summary>   
  ///   应用程序的主入口点。   
  ///   </summary>   
  [STAThread]   
  static   void   Main()     
  {   
  Application.Run(new   Form1());   
  }   
    
  private   void   BtnCapTure_Click(object   sender,   System.EventArgs   e)   
  {   
  this.OpenCapture();   
    
  }   
  private   void   OpenCapture()   
  {   
    
  int   intWidth=this.panel_Vedio.Width;   
  int   intHeight=this.panel_Vedio.Height;   
  int   intDevice=0;   
  string   refDevice=intDevice.ToString();   
  hHwnd=Form1.capCreateCaptureWindowA(ref   refDevice,1342177280,0,0,640,480,this.panel_Vedio.Handle.ToInt32(),0);   
  this.LbSysMsg.Text="";   
  this.LbSysMsg.Text+="驱动:"+refDevice;   
  if(Form1.SendMessage(hHwnd,0x40a,intDevice,0)>0)   
  {   
  Form1.SendMessage(this.hHwnd,0x435,-1,   0);   
  Form1.SendMessage(this.hHwnd,0x434,0x42,   0);   
  Form1.SendMessage(this.hHwnd,0x432,-1,   0);   
  Form1.SetWindowPos(this.hHwnd,1,0,0,intWidth,intHeight,6);   
  this.BtnCapTure.Enabled=false;   
  this.BtnStop.Enabled=true;   
  }   
  else   
  {   
  Form1.DestroyWindow(this.hHwnd);   
  this.BtnCapTure.Enabled=false;   
  this.BtnStop.Enabled=true;   
  }   
  }   
    
  private   void   BtnStop_Click(object   sender,   System.EventArgs   e)   
  {   
  Form1.SendMessage(this.hHwnd,   0x40b,   0,   0);   
  Form1.DestroyWindow(this.hHwnd);   
  this.BtnCapTure.Enabled=true;   
  this.BtnStop.Enabled=false;   
  }   
    
  private   void   button1_Click(object   sender,   System.EventArgs   e)   
  {   
  try   
  {   
  Form1.SendMessage(this.hHwnd,0x41e,0,0);   
  IDataObject   obj1   =   Clipboard.GetDataObject();   
  if   (obj1.GetDataPresent(typeof(Bitmap)))   
  {   
                                      Image   image1   =   (Image)   obj1.GetData(typeof(Bitmap));   
                                    //   this.panel_Vedio.Image   =   image1;   
                                    //   this.ClosePreviewWindow();   
                                        
      SaveFileDialog   SaveFileDialog1=new   SaveFileDialog();   
                                      if   (SaveFileDialog1.ShowDialog()   ==   DialogResult.OK)   
                                      {   
                                                  image1.Save(SaveFileDialog1.FileName,   ImageFormat.Bmp);   
                                      }   
    }   
  }   
  catch   
  {   
  }   
  }   
  }   
  }   

#3


做过的朋友,教教啊

#4


帮顶.结贴时记得给点分..呵呵

#5


关注。

#6


楼上的楼上,你当我财主说?本来就只有20分,给多少给你啊?

#7


等你的好信了。我已经改成WinForm了。

#8


楼主贴的是winform的代码
web方式可以使用flash来实现在线拍照。

#9


sumanden(心头慌,打中张) ( ) 
楼主贴的是winform的代码
web方式可以使用flash来实现在线拍照。
能不能给我发个资料了vainnetwork@126.com谢谢

#10


web上的基本都是flash实现,去一些网站下载一个,反编译一下,一般稍微修改下就能用。(我就是这样做的)

#11


新版本的falsh里面内置了这个功能
我看好多在线录制视频的网站都是用这东西的
楼主不妨查下相关的资料吧
我认为如果自己开发插件的话代价不是一般的大

#12


to szc21(坚持才是王道)
不是吧????你下的是什么啊?ActiveX?除非是.net写的你反编译还可以

#13


flash也能反编译的。很简单:你打开它的网站,在线拍照,然后在缓存里面查,把那flash拷贝出来,用专门的工具进行反编译,改下里面的设置。

#14


mark

#15


web下的服务器组件是不可能做得出来的。只能找ocx或者flash.

#16


?

#17


asp.net 不能实现在线拍照.

你看见的那些,多是使用flash+fcs/fms

#18


好。

#1



using   System;   
  using   System.Drawing;   
  using   System.Collections;   
  using   System.ComponentModel;   
  using   System.Windows.Forms;   
  using   System.Data;   
  using   System.Runtime.InteropServices;   
  using   System.Drawing.Imaging;   
    
  namespace   CapTureMovie   
  {   
  ///   <summary>   
  ///   Form1   的摘要说明。   
  ///   </summary>   
  public   class   Form1   :   System.Windows.Forms.Form   
  {   
  private   System.Windows.Forms.Button   BtnCapTure;   
  private   System.Windows.Forms.Panel   panel_Vedio;   
  private   int   hHwnd;   
  private   System.Windows.Forms.Button   BtnStop;   
  private   System.Windows.Forms.Label   LbSysMsg;   
  private   System.Windows.Forms.Button   button1;   
    
  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;     
    
  }   
  public   delegate   bool   CallBack(int   hwnd,   int   lParam);     
  ///   <summary>   
  ///   必需的设计器变量。   
  ///   </summary>   
  private   System.ComponentModel.Container   components   =   null;   
  [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);   
    

#2


接到上面:
 public   Form1()   
  {   
  //   
  //   Windows   窗体设计器支持所必需的   
  //   
  InitializeComponent();   
    
  //   
  //   TODO:   在   InitializeComponent   调用后添加任何构造函数代码   
  //   
  }   
    
  ///   <summary>   
  ///   清理所有正在使用的资源。   
  ///   </summary>   
  protected   override   void   Dispose(   bool   disposing   )   
  {   
  if(   disposing   )   
  {   
  if   (components   !=   null)     
  {   
  components.Dispose();   
  }   
  }   
  base.Dispose(   disposing   );   
  }   
    
  #region   Windows   窗体设计器生成的代码   
  ///   <summary>   
  ///   设计器支持所需的方法   -   不要使用代码编辑器修改   
  ///   此方法的内容。   
  ///   </summary>   
  private   void   InitializeComponent()   
  {   
  System.Resources.ResourceManager   resources   =   new   System.Resources.ResourceManager(typeof(Form1));   
  this.panel_Vedio   =   new   System.Windows.Forms.Panel();   
  this.BtnCapTure   =   new   System.Windows.Forms.Button();   
  this.BtnStop   =   new   System.Windows.Forms.Button();   
  this.LbSysMsg   =   new   System.Windows.Forms.Label();   
  this.button1   =   new   System.Windows.Forms.Button();   
  this.SuspendLayout();   
  //     
  //   panel_Vedio   
  //     
  this.panel_Vedio.BackgroundImage   =   ((System.Drawing.Image)(resources.GetObject("panel_Vedio.BackgroundImage")));   
  this.panel_Vedio.BorderStyle   =   System.Windows.Forms.BorderStyle.Fixed3D;   
  this.panel_Vedio.Location   =   new   System.Drawing.Point(8,   16);   
  this.panel_Vedio.Name   =   "panel_Vedio";   
  this.panel_Vedio.Size   =   new   System.Drawing.Size(288,   224);   
  this.panel_Vedio.TabIndex   =   0;   
  //     
  //   BtnCapTure   
  //     
  this.BtnCapTure.Location   =   new   System.Drawing.Point(24,   256);   
  this.BtnCapTure.Name   =   "BtnCapTure";   
  this.BtnCapTure.TabIndex   =   1;   
  this.BtnCapTure.Text   =   "图象采集";   
  this.BtnCapTure.Click   +=   new   System.EventHandler(this.BtnCapTure_Click);   
  //     
  //   BtnStop   
  //     
  this.BtnStop.Enabled   =   false;   
  this.BtnStop.Location   =   new   System.Drawing.Point(136,   256);   
  this.BtnStop.Name   =   "BtnStop";   
  this.BtnStop.TabIndex   =   1;   
  this.BtnStop.Text   =   "停止采集";   
  this.BtnStop.Click   +=   new   System.EventHandler(this.BtnStop_Click);   
  //     
  //   LbSysMsg   
  //     
  this.LbSysMsg.Location   =   new   System.Drawing.Point(16,   296);   
  this.LbSysMsg.Name   =   "LbSysMsg";   
  this.LbSysMsg.Size   =   new   System.Drawing.Size(240,   23);   
  this.LbSysMsg.TabIndex   =   2;   
  //     
  //   button1   
  //     
  this.button1.Location   =   new   System.Drawing.Point(304,   48);   
  this.button1.Name   =   "button1";   
  this.button1.TabIndex   =   3;   
  this.button1.Text   =   "button1";   
  this.button1.Click   +=   new   System.EventHandler(this.button1_Click);   
  //     
  //   Form1   
  //     
  this.AutoScaleBaseSize   =   new   System.Drawing.Size(6,   14);   
  this.ClientSize   =   new   System.Drawing.Size(400,   357);   
  this.Controls.Add(this.button1);   
  this.Controls.Add(this.LbSysMsg);   
  this.Controls.Add(this.BtnCapTure);   
  this.Controls.Add(this.panel_Vedio);   
  this.Controls.Add(this.BtnStop);   
  this.Name   =   "Form1";   
  this.Text   =   "Form1";   
  this.ResumeLayout(false);   
    
  }   
  #endregion   
    
  ///   <summary>   
  ///   应用程序的主入口点。   
  ///   </summary>   
  [STAThread]   
  static   void   Main()     
  {   
  Application.Run(new   Form1());   
  }   
    
  private   void   BtnCapTure_Click(object   sender,   System.EventArgs   e)   
  {   
  this.OpenCapture();   
    
  }   
  private   void   OpenCapture()   
  {   
    
  int   intWidth=this.panel_Vedio.Width;   
  int   intHeight=this.panel_Vedio.Height;   
  int   intDevice=0;   
  string   refDevice=intDevice.ToString();   
  hHwnd=Form1.capCreateCaptureWindowA(ref   refDevice,1342177280,0,0,640,480,this.panel_Vedio.Handle.ToInt32(),0);   
  this.LbSysMsg.Text="";   
  this.LbSysMsg.Text+="驱动:"+refDevice;   
  if(Form1.SendMessage(hHwnd,0x40a,intDevice,0)>0)   
  {   
  Form1.SendMessage(this.hHwnd,0x435,-1,   0);   
  Form1.SendMessage(this.hHwnd,0x434,0x42,   0);   
  Form1.SendMessage(this.hHwnd,0x432,-1,   0);   
  Form1.SetWindowPos(this.hHwnd,1,0,0,intWidth,intHeight,6);   
  this.BtnCapTure.Enabled=false;   
  this.BtnStop.Enabled=true;   
  }   
  else   
  {   
  Form1.DestroyWindow(this.hHwnd);   
  this.BtnCapTure.Enabled=false;   
  this.BtnStop.Enabled=true;   
  }   
  }   
    
  private   void   BtnStop_Click(object   sender,   System.EventArgs   e)   
  {   
  Form1.SendMessage(this.hHwnd,   0x40b,   0,   0);   
  Form1.DestroyWindow(this.hHwnd);   
  this.BtnCapTure.Enabled=true;   
  this.BtnStop.Enabled=false;   
  }   
    
  private   void   button1_Click(object   sender,   System.EventArgs   e)   
  {   
  try   
  {   
  Form1.SendMessage(this.hHwnd,0x41e,0,0);   
  IDataObject   obj1   =   Clipboard.GetDataObject();   
  if   (obj1.GetDataPresent(typeof(Bitmap)))   
  {   
                                      Image   image1   =   (Image)   obj1.GetData(typeof(Bitmap));   
                                    //   this.panel_Vedio.Image   =   image1;   
                                    //   this.ClosePreviewWindow();   
                                        
      SaveFileDialog   SaveFileDialog1=new   SaveFileDialog();   
                                      if   (SaveFileDialog1.ShowDialog()   ==   DialogResult.OK)   
                                      {   
                                                  image1.Save(SaveFileDialog1.FileName,   ImageFormat.Bmp);   
                                      }   
    }   
  }   
  catch   
  {   
  }   
  }   
  }   
  }   

#3


做过的朋友,教教啊

#4


帮顶.结贴时记得给点分..呵呵

#5


关注。

#6


楼上的楼上,你当我财主说?本来就只有20分,给多少给你啊?

#7


等你的好信了。我已经改成WinForm了。

#8


楼主贴的是winform的代码
web方式可以使用flash来实现在线拍照。

#9


sumanden(心头慌,打中张) ( ) 
楼主贴的是winform的代码
web方式可以使用flash来实现在线拍照。
能不能给我发个资料了vainnetwork@126.com谢谢

#10


web上的基本都是flash实现,去一些网站下载一个,反编译一下,一般稍微修改下就能用。(我就是这样做的)

#11


新版本的falsh里面内置了这个功能
我看好多在线录制视频的网站都是用这东西的
楼主不妨查下相关的资料吧
我认为如果自己开发插件的话代价不是一般的大

#12


to szc21(坚持才是王道)
不是吧????你下的是什么啊?ActiveX?除非是.net写的你反编译还可以

#13


flash也能反编译的。很简单:你打开它的网站,在线拍照,然后在缓存里面查,把那flash拷贝出来,用专门的工具进行反编译,改下里面的设置。

#14


mark

#15


web下的服务器组件是不可能做得出来的。只能找ocx或者flash.

#16


?

#17


asp.net 不能实现在线拍照.

你看见的那些,多是使用flash+fcs/fms

#18


好。