仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 835|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之C#捕获摄相头的数据流

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:37:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
2003年中微软发布最新版本的ASP.netWebMatrix,对于我们喜欢用Asp.net来编程的朋友实在是个好消息,我也实实在在的将Asp.net更深入的研究了一下,以方便我以后更好的运用它,同时我也讲讲使用它的感受。数据没甚么好说的了,我把代码都贴出来,人人本人看吧!
webcam类的代码:
usingSystem;
usingSystem.Runtime.InteropServices;namespacewebcam
{
/**////
///avicap的择要申明。
///
publicclassshowVideo
{
//showVideocalls
[DllImport("avicap32.dll")]publicstaticexternIntPtrcapCreateCaptureWindowA(byte[]lpszWindowName,intdwStyle,intx,inty,intnWidth,intnHeight,IntPtrhWndParent,intnID);
[DllImport("avicap32.dll")]publicstaticexternboolcapGetDriverDescriptionA(shortwDriver,byte[]lpszName,intcbName,byte[]lpszVer,intcbVer);
[DllImport("User32.dll")]publicstaticexternboolSendMessage(IntPtrhWnd,intwMsg,boolwParam,intlParam);
[DllImport("User32.dll")]publicstaticexternboolSendMessage(IntPtrhWnd,intwMsg,shortwParam,intlParam);
[DllImport("User32.dll")]publicstaticexternboolSendMessage(IntPtrhWnd,intwMsg,shortwParam,FrameEventHandlerlParam);
[DllImport("User32.dll")]publicstaticexternboolSendMessage(IntPtrhWnd,intwMsg,intwParam,refBITMAPINFOlParam);
[DllImport("User32.dll")]publicstaticexternintSetWindowPos(IntPtrhWnd,inthWndInsertAfter,intx,inty,intcx,intcy,intwFlags);
[DllImport("avicap32.dll")]publicstaticexternintcapGetVideoFormat(IntPtrhWnd,IntPtrpsVideoFormat,intwSize);
//Constants
publicconstintWM_USER=0x400;
publicconstintWS_CHILD=0x40000000;
publicconstintWS_VISIBLE=0x10000000;
publicconstintSWP_NOMOVE=0x2;
publicconstintSWP_NOZORDER=0x4;
publicconstintWM_CAP_DRIVER_CONNECT=WM_USER+10;
publicconstintWM_CAP_DRIVER_DISCONNECT=WM_USER+11;
publicconstintWM_CAP_SET_CALLBACK_FRAME=WM_USER+5;
publicconstintWM_CAP_SET_PREVIEW=WM_USER+50;
publicconstintWM_CAP_SET_PREVIEWRATE=WM_USER+52;
publicconstintWM_CAP_SET_VIDEOFORMAT=WM_USER+45;

//Structures
[StructLayout(LayoutKind.Sequential)]publicstructVIDEOHDR
{
[MarshalAs(UnmanagedType.I4)]publicintlpData;
[MarshalAs(UnmanagedType.I4)]publicintdwBufferLength;
[MarshalAs(UnmanagedType.I4)]publicintdwBytesUsed;
[MarshalAs(UnmanagedType.I4)]publicintdwTimeCaptured;
[MarshalAs(UnmanagedType.I4)]publicintdwUser;
[MarshalAs(UnmanagedType.I4)]publicintdwFlags;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]publicint[]dwReserved;
}
[StructLayout(LayoutKind.Sequential)]publicstructBITMAPINFOHEADER
{
[MarshalAs(UnmanagedType.I4)]publicInt32biSize;
[MarshalAs(UnmanagedType.I4)]publicInt32biWidth;
[MarshalAs(UnmanagedType.I4)]publicInt32biHeight;
[MarshalAs(UnmanagedType.I2)]publicshortbiPlanes;
[MarshalAs(UnmanagedType.I2)]publicshortbiBitCount;
[MarshalAs(UnmanagedType.I4)]publicInt32biCompression;
[MarshalAs(UnmanagedType.I4)]publicInt32biSizeImage;
[MarshalAs(UnmanagedType.I4)]publicInt32biXPelsPerMeter;
[MarshalAs(UnmanagedType.I4)]publicInt32biYPelsPerMeter;
[MarshalAs(UnmanagedType.I4)]publicInt32biClrUsed;
[MarshalAs(UnmanagedType.I4)]publicInt32biClrImportant;
}
[StructLayout(LayoutKind.Sequential)]publicstructBITMAPINFO
{
[MarshalAs(UnmanagedType.Struct,SizeConst=40)]publicBITMAPINFOHEADERbmiHeader;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=1024)]publicInt32[]bmiColors;
}

publicdelegatevoidFrameEventHandler(IntPtrlwnd,IntPtrlpVHdr);

//Publicmethods
publicstaticobjectGetStructure(IntPtrptr,ValueTypestructure)
{
returnMarshal.PtrToStructure(ptr,structure.GetType());
}

publicstaticobjectGetStructure(intptr,ValueTypestructure)
{
returnGetStructure(newIntPtr(ptr),structure);
}

publicstaticvoidCopy(IntPtrptr,byte[]data)
{
Marshal.Copy(ptr,data,0,data.Length);
}

publicstaticvoidCopy(intptr,byte[]data)
{
Copy(newIntPtr(ptr),data);
}

publicstaticintSizeOf(objectstructure)
{
returnMarshal.SizeOf(structure);
}
}
//WebCameraClass
publicclassWebCamera
{
//Constructur
publicWebCamera(IntPtrhandle,intwidth,intheight)
{
mControlPtr=handle;
mWidth=width;
mHeight=height;
}
//delegateforframecallback
publicdelegatevoidRecievedFrameEventHandler(byte[]data);
publiceventRecievedFrameEventHandlerRecievedFrame;

privateIntPtrlwndC;//Holdstheunmanagedhandleofthecontrol
privateIntPtrmControlPtr;//Holdsthemanagedpointerofthecontrol
privateintmWidth;
privateintmHeight;

privateshowVideo.FrameEventHandlermFrameEventHandler;//Delegateinstancefortheframecallback-mustkeepalive!gcshouldNOTcollectit
//Closethewebcamera
publicvoidCloseWebcam()
{
this.capDriverDisconnect(this.lwndC);
}

//startthewebcamera
publicvoidStartWebCam()
{
byte[]lpszName=newbyte[100];
byte[]lpszVer=newbyte[100];

showVideo.capGetDriverDescriptionA(0,lpszName,100,lpszVer,100);
this.lwndC=showVideo.capCreateCaptureWindowA(lpszName,showVideo.WS_VISIBLE+showVideo.WS_CHILD,0,0,mWidth,mHeight,mControlPtr,0);

if(this.capDriverConnect(this.lwndC,0))
{
this.capPreviewRate(this.lwndC,66);
this.capPreview(this.lwndC,true);
showVideo.BITMAPINFObitmapinfo=newshowVideo.BITMAPINFO();
bitmapinfo.bmiHeader.biSize=showVideo.SizeOf(bitmapinfo.bmiHeader);
bitmapinfo.bmiHeader.biWidth=352;
bitmapinfo.bmiHeader.biHeight=288;
bitmapinfo.bmiHeader.biPlanes=1;
bitmapinfo.bmiHeader.biBitCount=24;
this.capSetVideoFormat(this.lwndC,refbitmapinfo,showVideo.SizeOf(bitmapinfo));
this.mFrameEventHandler=newshowVideo.FrameEventHandler(FrameCallBack);
this.capSetCallbackOnFrame(this.lwndC,this.mFrameEventHandler);
showVideo.SetWindowPos(this.lwndC,0,0,0,mWidth,mHeight,6);
}
}
//privatefunctions
privateboolcapDriverConnect(IntPtrlwnd,shorti)
{
returnshowVideo.SendMessage(lwnd,showVideo.WM_CAP_DRIVER_CONNECT,i,0);
}
privateboolcapDriverDisconnect(IntPtrlwnd)
{
returnshowVideo.SendMessage(lwnd,showVideo.WM_CAP_DRIVER_DISCONNECT,0,0);
}
privateboolcapPreview(IntPtrlwnd,boolf)
{returnshowVideo.SendMessage(lwnd,showVideo.WM_CAP_SET_PREVIEW,f,0);}
privateboolcapPreviewRate(IntPtrlwnd,shortwMS)
{
returnshowVideo.SendMessage(lwnd,showVideo.WM_CAP_SET_PREVIEWRATE,wMS,0);
}

privateboolcapSetCallbackOnFrame(IntPtrlwnd,showVideo.FrameEventHandlerlpProc)
{
returnshowVideo.SendMessage(lwnd,showVideo.WM_CAP_SET_CALLBACK_FRAME,0,lpProc);
}
privateboolcapSetVideoFormat(IntPtrhCapWnd,refshowVideo.BITMAPINFOBmpFormat,intCapFormatSize)
{
returnshowVideo.SendMessage(hCapWnd,showVideo.WM_CAP_SET_VIDEOFORMAT,CapFormatSize,refBmpFormat);
}
privatevoidFrameCallBack(IntPtrlwnd,IntPtrlpVHdr)
{
showVideo.VIDEOHDRvideoHeader=newshowVideo.VIDEOHDR();
byte[]VideoData;
videoHeader=(showVideo.VIDEOHDR)showVideo.GetStructure(lpVHdr,videoHeader);
VideoData=newbyte[videoHeader.dwBytesUsed];
showVideo.Copy(videoHeader.lpData,VideoData);
if(this.RecievedFrame!=null)
this.RecievedFrame(VideoData);
}
}
}
上面是完成的代码
usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Data;
usingwebcam;
namespacewebcam
{
/**////
///Form1的择要申明。
///
publicclassForm1:System.Windows.Forms.Form
{
privateSystem.Windows.Forms.PanelpanelPreview;
privateSystem.Windows.Forms.Buttonb_play;
privateSystem.Windows.Forms.Buttonb_stop;
/**////
///必须的计划器变量。
///
privateSystem.ComponentModel.Containercomponents=null;
WebCamerawc;
publicForm1()
{
//
//Windows窗体计划器撑持所必须的
//
InitializeComponent();
//
//TODO:在InitializeComponent挪用后增加任何机关函数代码
//
}
/**////
///清算一切正在利用的资本。
///
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
Windows窗体计划器天生的代码#regionWindows窗体计划器天生的代码
/**////
///计划器撑持所需的办法-不要利用代码编纂器修正
///此办法的内容。
///
privatevoidInitializeComponent()
{
this.b_play=newSystem.Windows.Forms.Button();
this.panelPreview=newSystem.Windows.Forms.Panel();
this.b_stop=newSystem.Windows.Forms.Button();
this.SuspendLayout();
//
//b_play
//
this.b_play.Location=newSystem.Drawing.Point(280,368);
this.b_play.Name="b_play";
this.b_play.TabIndex=0;
this.b_play.Text="&Play";
this.b_play.Click+=newSystem.EventHandler(this.button1_Click);
//
//panelPreview
//
this.panelPreview.Location=newSystem.Drawing.Point(8,8);
this.panelPreview.Name="panelPreview";
this.panelPreview.Size=newSystem.Drawing.Size(344,272);
this.panelPreview.TabIndex=1;
//
//b_stop
//
this.b_stop.Enabled=false;
this.b_stop.Location=newSystem.Drawing.Point(360,368);
this.b_stop.Name="b_stop";
this.b_stop.TabIndex=2;
this.b_stop.Text="&Stop";
this.b_stop.Click+=newSystem.EventHandler(this.b_stop_Click);
//
//Form1
//
this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);
this.ClientSize=newSystem.Drawing.Size(464,413);
this.Controls.Add(this.b_stop);
this.Controls.Add(this.panelPreview);
this.Controls.Add(this.b_play);
this.MaximizeBox=false;
this.MinimizeBox=false;
this.Name="Form1";
this.Text="GoodViewtestWebCamera";
this.Load+=newSystem.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
/**////
///使用程序的主出口点。
///
[STAThread]
staticvoidMain()
{
Application.Run(newForm1());
}
privatevoidForm1_Load(objectsender,System.EventArgse)
{
b_play.Enabled=false;
b_stop.Enabled=true;
panelPreview.Size=newSize(330,330);
wc=newWebCamera(panelPreview.Handle,panelPreview.Width,panelPreview.Height);
wc.StartWebCam();
}
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
b_play.Enabled=false;
b_stop.Enabled=true;
panelPreview.Size=newSize(330,330);
wc=newWebCamera(panelPreview.Handle,panelPreview.Width,panelPreview.Height);
wc.StartWebCam();
}
privatevoidb_stop_Click(objectsender,System.EventArgse)
{
b_play.Enabled=true;
b_stop.Enabled=false;
wc.CloseWebcam();
}
}
}
你所列的那些其实差不多都可以称为应用服务器(servlet应该说是一种语言更合适)java是开放的,相同的工具就会有很多公司在做,加上java已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。
小女巫 该用户已被删除
沙发
发表于 2015-1-19 19:31:50 | 只看该作者
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
乐观 该用户已被删除
板凳
发表于 2015-1-24 18:20:16 | 只看该作者
HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
深爱那片海 该用户已被删除
地板
发表于 2015-2-2 11:38:27 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
谁可相欹 该用户已被删除
5#
 楼主| 发表于 2015-2-7 19:12:41 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
只想知道 该用户已被删除
6#
发表于 2015-2-23 01:59:06 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
活着的死人 该用户已被删除
7#
发表于 2015-3-7 05:32:22 | 只看该作者
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
透明 该用户已被删除
8#
发表于 2015-3-14 11:43:45 | 只看该作者
HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
飘灵儿 该用户已被删除
9#
发表于 2015-3-21 05:29:09 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-9 06:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表