2010-06-02 13 views
1

Je suis impatient d'utiliser webcam api avec asp.net et C#. J'ai inclus toute la bibliothèque et les références dont j'avais besoin pour cela.Erreur d'API webcam quand on accède à partir du code côté serveur ASP.NET

Le code d'origine que j'ai utilisé était pour l'application Windows et j'essaie de le convertir en application web asp.net.

Je commence à capturer le bouton lorsque je clique dessus, il devrait commencer à capturer mais cela me donne une erreur.

l'erreur sur cette ligne:

hHwnd = capCreateCaptureWindowA(iDevice.ToString(), (WS_VISIBLE | WS_CHILD), 0, 0, 640, 480, picCapture.Handle.ToInt32(), 0); 

et le message d'erreur est:

Erreur 1 'System.Web.UI.WebControls.Image' ne contient pas de définition de 'poignée' et Aucune méthode d'extension 'Handle' acceptant un premier argument de type 'System.Web.UI.WebControls.Image' n'a été trouvée (manque-t-il une directive using ou une référence d'assembly?) C: \ Users \ Ali \ Documents \ Visual Studio 2008 \ Projects \ Conference \ Conference \ Conference1.aspx.cs 63 117 Conférence

S'il vous plaît avis !!

................................................ 
here is the complete code 
........................................... 

using System; 
using System.Collections; 
using System.Drawing; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using System.Runtime.InteropServices; 
using System.Drawing.Imaging; 
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 
using System.IO; 

namespace Conference 
{ 
    public partial class Conference1 : System.Web.UI.Page 
    { 


     #region WebCam API 
     const short WM_CAP = 1024; 
     const int WM_CAP_DRIVER_CONNECT = WM_CAP + 10; 
     const int WM_CAP_DRIVER_DISCONNECT = WM_CAP + 11; 
     const int WM_CAP_EDIT_COPY = WM_CAP + 30; 
     const int WM_CAP_SET_PREVIEW = WM_CAP + 50; 
     const int WM_CAP_SET_PREVIEWRATE = WM_CAP + 52; 
     const int WM_CAP_SET_SCALE = WM_CAP + 53; 
     const int WS_CHILD = 1073741824; 
     const int WS_VISIBLE = 268435456; 
     const short SWP_NOMOVE = 2; 
     const short SWP_NOSIZE = 1; 
     const short SWP_NOZORDER = 4; 
     const short HWND_BOTTOM = 1; 
     int iDevice = 0; 
     int hHwnd; 
     [System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SendMessageA")] 
     static extern int SendMessage(int hwnd, int wMsg, int wParam, [MarshalAs(UnmanagedType.AsAny)] 
      object lParam); 
     [System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SetWindowPos")] 
     static extern int SetWindowPos(int hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags); 
     [System.Runtime.InteropServices.DllImport("user32")] 
     static extern bool DestroyWindow(int hndw); 
     [System.Runtime.InteropServices.DllImport("avicap32.dll")] 
     static extern int capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int x, int y, int nWidth, short nHeight, int hWndParent, int nID); 
     [System.Runtime.InteropServices.DllImport("avicap32.dll")] 
     static extern bool capGetDriverDescriptionA(short wDriver, string lpszName, int cbName, string lpszVer, int cbVer); 
     private void OpenPreviewWindow() 
     { 
      int iHeight = 320; 
      int iWidth = 200; 
      // 
      // Open Preview window in picturebox 
      // 
      hHwnd = capCreateCaptureWindowA(iDevice.ToString(), (WS_VISIBLE | WS_CHILD), 0, 0, 640, 480, picCapture.Handle.ToInt32(), 0); 
      // 
      // Connect to device 
      // 
      if (SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) == 1) 
      { 
       // 
       // Set the preview scale 
       // 
       SendMessage(hHwnd, WM_CAP_SET_SCALE, 1, 0); 
       // 
       // Set the preview rate in milliseconds 
       // 
       SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0); 
       // 
       // Start previewing the image from the camera 
       // 
       SendMessage(hHwnd, WM_CAP_SET_PREVIEW, 1, 0); 
       // 
       // Resize window to fit in picturebox 
       // 
       SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, iWidth, iHeight, (SWP_NOMOVE | SWP_NOZORDER)); 
      } 
      else 
      { 
       // 
       // Error connecting to device close window 
       // 
       DestroyWindow(hHwnd); 
      } 
     } 
     private void ClosePreviewWindow() 
     { 
      // 
      // Disconnect from device 
      // 
      SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0); 
      // 
      // close window 
      // 
      DestroyWindow(hHwnd); 
     } 
     #endregion 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void btnStart_Click(object sender, EventArgs e) 
     { 
      int iDevice = int.Parse(device_number_textBox.Text); 
      OpenPreviewWindow(); 
     } 
    } 
} 
+0

Etes-vous en train d'essayer d'obtenir une webcam du serveur ou de l'utilisateur final? – SLaks

+0

@SLaks de l'utilisateur final. – Eyla

+1

Le code C# s'exécute sur le serveur et ne peut pas accéder à l'ordinateur ou à la webcam de l'utilisateur. – SLaks

Répondre

1

Il est possible d'obtenir une webcam de l'utilisateur final en utilisant Flash ou Silverlight 4.

+0

Pouvez-vous donner un exemple comment puis-je obtenir ceci en utilisant flash ou silverlight 4, merci d'avance pour toute réponse. –

2

Votre code ne peut pas fonctionner.

L'API native est étroitement liée aux contrôles Windows standard.
Il ne peut pas être utilisé dans ASP.Net.

+0

puis-je dire que la seule façon d'accéder à web-cam avec une application web est soit d'utiliser flash ou silverlight ??? – Eyla

0

Entre autres problèmes, le contrôle de l'image dans ASP.NET correspond à la balise <img/> en HTML. Il n'y a rien comme une poignée de fenêtre associée à une balise HTML.