[英]Webcam api error when accessed from ASP.NET Server-side code
I'm tring to use webcam api with asp.net and C#. 我正在尝试将Webcam api与asp.net和C#结合使用。 I included all the library and references I needed for that. 我包括了为此所需的所有库和参考。
the original code I'm use was for windows application and I'm trying to convert it to asp.net web application. 我使用的原始代码用于Windows应用程序,并且我试图将其转换为asp.net Web应用程序。
I have start capturing button when I click it, it should start capturing but it gives me an error. 单击它时,我有开始捕获按钮,它应该开始捕获,但是它给我一个错误。
the error at this line: 此行的错误:
hHwnd = capCreateCaptureWindowA(iDevice.ToString(), (WS_VISIBLE | WS_CHILD), 0, 0, 640, 480, picCapture.Handle.ToInt32(), 0);
and the error message is: 错误消息是:
Error 1 'System.Web.UI.WebControls.Image' does not contain a definition for 'Handle' and no extension method 'Handle' accepting a first argument of type 'System.Web.UI.WebControls.Image' could be found (are you missing a using directive or an assembly reference?) C:\\Users\\Ali\\Documents\\Visual Studio 2008\\Projects\\Conference\\Conference\\Conference1.aspx.cs 63 117 Conference 错误1'System.Web.UI.WebControls.Image'不包含'Handle'的定义,并且找不到扩展方法'Handle'接受类型为'System.Web.UI.WebControls.Image'的第一个参数(您是否缺少using指令或程序集引用?)C:\\ Users \\ Ali \\ Documents \\ Visual Studio 2008 \\ Projects \\ Conference \\ Conference \\ Conference1.aspx.cs 63117会议
Please advice!! 请指教!!
................................................
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();
}
}
}
You code cannot possibly work. 您的代码可能无法正常工作。
The native API is tightly tied to standard Windows controls. 本机API与标准Windows控件紧密相关。
It cannot be used in ASP.Net. 它不能在ASP.Net中使用。
只有使用Flash或Silverlight 4才能获得最终用户的网络摄像头。
Among other problems, the image control in ASP.NET corresponds to the <img/>
tag in HTML. 除其他问题外,ASP.NET中的图像控件与HTML中的<img/>
标记相对应。 There is nothing like a window handle associated with an HTML tag. 没有什么像与HTML标记关联的窗口句柄一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.