All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
sql server2005设置自动备份全过程_[SQL Server教程]
为ASP.NET,MVC开发一些常用插件(一)——导航栏_[Asp.Net教程]
SQL语句查询是否为空 =null及null_[SQL Server教程]
Visual C++ 6.0教程:c++数据类型之指针
C#箴言:定义常量的两种方法_[Asp.Net教程]
初学来看:动态网页制作技术PHP的变量类型_php资料_编程技术
PHP程序中使用session错误调试问题_php资料_编程技术
PHP连接MYSQL的两种方法_[PHP教程]
js变量作用域及可访问性的探讨_JavaScript技术_编程技术
Visual C++ 6.0教程:#include文件包含指令
Reading number is top 10 pictures
Beauty Sun Feifei
这才是真正的人体艺术3
中国的阶级现状
梦幻的风景
住院一星期,检测费两万
[猫扑大杂烩]华东师范墙上看到的捐精告示 15毫升3600元
Steal to eat bacon bird
真正的国产-非模拍 贵在是真实2
西游日记4
The money of more than 100 countries and regions20
Download software ranking
ASP.NET.2.0.XML.高级编程(第3版)
The hero
Boxer Classic video3
电脑知识及技巧大合集
I'm come from Beijing1
小黑猫大战两米大花蛇
打鸟视频
Unix video tutorial19
塘西风月痕
Love the forty days
delv published in(发表于) 2014/1/6 9:06:46 Edit(编辑)
C#捕捉摄相头的数据流_[Asp.Net教程]

C#捕捉摄相头的数据流_[Asp.Net教程]

C#捕捉摄相头的数据流_[Asp.Net教程]

没什么好说的了,我把代码都贴出来,大家自己看吧!
webcam类的代码:
using System;
using System.Runtime.InteropServices;

namespace webcam
{
/**////
/// avicap 的摘要说明。
///
public class showVideo
{
// showVideo calls
[DllImport("avicap32.dll")] public static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
[DllImport("avicap32.dll")] public static extern bool capGetDriverDescriptionA(short wDriver, byte[] lpszName, int cbName, byte[] lpszVer, int cbVer);
[DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);
[DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam);
[DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, FrameEventHandler lParam);
[DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref BITMAPINFO lParam);
[DllImport("User32.dll")] public static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
[DllImport("avicap32.dll")]public static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize );


// Constants
public const int WM_USER = 0x400;
public const int WS_CHILD = 0x40000000;
public const int WS_VISIBLE = 0x10000000;
public const int SWP_NOMOVE = 0x2;
public const int SWP_NOZORDER = 0x4;
public const int WM_CAP_DRIVER_CONNECT = WM_USER + 10;
public const int WM_CAP_DRIVER_DISCONNECT = WM_USER + 11;
public const int WM_CAP_SET_CALLBACK_FRAME = WM_USER + 5;
public const int WM_CAP_SET_PREVIEW = WM_USER + 50;
public const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;
public const int WM_CAP_SET_VIDEOFORMAT = WM_USER + 45;

// Structures
[StructLayout(LayoutKind.Sequential)] public struct VIDEOHDR
{
[MarshalAs(UnmanagedType.I4)] public int lpData;
[MarshalAs(UnmanagedType.I4)] public int dwBufferLength;
[MarshalAs(UnmanagedType.I4)] public int dwBytesUsed;
[MarshalAs(UnmanagedType.I4)] public int dwTimeCaptured;
[MarshalAs(UnmanagedType.I4)] public int dwUser;
[MarshalAs(UnmanagedType.I4)] public int dwFlags;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=4)] public int[] dwReserved;
}


[StructLayout(LayoutKind.Sequential)] public struct BITMAPINFOHEADER
{
[MarshalAs(UnmanagedType.I4)] public Int32 biSize ;
[MarshalAs(UnmanagedType.I4)] public Int32 biWidth ;
[MarshalAs(UnmanagedType.I4)] public Int32 biHeight ;
[MarshalAs(UnmanagedType.I2)] public short biPlanes;
[MarshalAs(UnmanagedType.I2)] public short biBitCount ;
[MarshalAs(UnmanagedType.I4)] public Int32 biCompression;
[MarshalAs(UnmanagedType.I4)] public Int32 biSizeImage;
[MarshalAs(UnmanagedType.I4)] public Int32 biXPelsPerMeter;
[MarshalAs(UnmanagedType.I4)] public Int32 biYPelsPerMeter;
[MarshalAs(UnmanagedType.I4)] public Int32 biClrUsed;
[MarshalAs(UnmanagedType.I4)] public Int32 biClrImportant;
}


[StructLayout(LayoutKind.Sequential)] public struct BITMAPINFO
{
[MarshalAs(UnmanagedType.Struct, SizeConst=40)] public BITMAPINFOHEADER bmiHeader;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=1024)] public Int32[] bmiColors;
}

public delegate void FrameEventHandler(IntPtr lwnd, IntPtr lpVHdr);

// Public methods
public static object GetStructure(IntPtr ptr,ValueType structure)
{
return Marshal.PtrToStructure(ptr,structure.GetType());
}

public static object GetStructure(int ptr,ValueType structure)
{
return GetStructure(new IntPtr(ptr),structure);
}

public static void Copy(IntPtr ptr,byte[] data)
{
Marshal.Copy(ptr,data,0,data.Length);
}

public static void Copy(int ptr,byte[] data)
{
Copy(new IntPtr(ptr),data);
}

public static int SizeOf(object structure)
{
return Marshal.SizeOf(structure);
}
}


//Web Camera Class
public class WebCamera
{
// Constructur
public WebCamera(IntPtr handle, int width,int height)
{
mControlPtr = handle;
mWidth = width;
mHeight = height;
}
// delegate for frame callback
public delegate void RecievedFrameEventHandler(byte[] data);
public event RecievedFrameEventHandler RecievedFrame;

private IntPtr lwndC; // Holds the unmanaged handle of the control
private IntPtr mControlPtr; // Holds the managed pointer of the control
private int mWidth;
private int mHeight;

private showVideo.FrameEventHandler mFrameEventHandler; // Delegate instance for the frame callback - must keep alive! gc should NOT collect it
// Close the web camera
public void CloseWebcam()
{
this.capDriverDisconnect(this.lwndC);
}

// start the web camera
public void StartWebCam()
{
byte[] lpszName = new byte[100];
byte[] lpszVer = new byte[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.BITMAPINFO bitmapinfo = new showVideo.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, ref bitmapinfo, showVideo.SizeOf(bitmapinfo));
this.mFrameEventHandler = new showVideo.FrameEventHandler(FrameCallBack);
this.capSetCallbackOnFrame(this.lwndC, this.mFrameEventHandler);
showVideo.SetWindowPos(this.lwndC, 0, 0, 0, mWidth , mHeight , 6);
}
}


// private functions
private bool capDriverConnect(IntPtr lwnd, short i)
{
return showVideo.SendMessage(lwnd, showVideo.WM_CAP_DRIVER_CONNECT, i, 0);
}
private bool capDriverDisconnect(IntPtr lwnd)
{
return showVideo.SendMessage(lwnd, showVideo.WM_CAP_DRIVER_DISCONNECT, 0, 0);
}
private bool capPreview(IntPtr lwnd, bool f)
{return showVideo.SendMessage(lwnd, showVideo.WM_CAP_SET_PREVIEW , f, 0);}


private bool capPreviewRate(IntPtr lwnd, short wMS)
{
return showVideo.SendMessage(lwnd, showVideo.WM_CAP_SET_PREVIEWRATE, wMS, 0);
}

private bool capSetCallbackOnFrame(IntPtr lwnd, showVideo.FrameEventHandler lpProc)
{
return showVideo.SendMessage(lwnd, showVideo.WM_CAP_SET_CALLBACK_FRAME, 0, lpProc);
}


private bool capSetVideoFormat(IntPtr hCapWnd, ref showVideo.BITMAPINFO BmpFormat, int CapFormatSize)
{
return showVideo.SendMessage(hCapWnd, showVideo.WM_CAP_SET_VIDEOFORMAT, CapFormatSize, ref BmpFormat);
}


private void FrameCallBack(IntPtr lwnd, IntPtr lpVHdr)
{
showVideo.VIDEOHDR videoHeader = new showVideo.VIDEOHDR();
byte[] VideoData;
videoHeader = (showVideo.VIDEOHDR)showVideo.GetStructure(lpVHdr,videoHeader);
VideoData = new byte[videoHeader.dwBytesUsed];
showVideo.Copy(videoHeader.lpData ,VideoData);
if (this.RecievedFrame != null)
this.RecievedFrame (VideoData);
}
}


}
下面是实现的代码
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using webcam;


namespace webcam
{
/**////
/// Form1 的摘要说明。
///
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Panel panelPreview;
private System.Windows.Forms.Button b_play;
private System.Windows.Forms.Button b_stop;
/**////
/// 必需的设计器变量。
///
private System.ComponentModel.Container components = null;
WebCamera wc;


public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();


//
// TOD 在 InitializeComponent 调用后添加任何构造函数代码
//
}


/**////
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}


Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
/**////
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.b_play = new System.Windows.Forms.Button();
this.panelPreview = new System.Windows.Forms.Panel();
this.b_stop = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// b_play
//
this.b_play.Location = new System.Drawing.Point(280, 368);
this.b_play.Name = "b_play";
this.b_play.TabIndex = 0;
this.b_play.Text = "&Play";
this.b_play.Click += new System.EventHandler(this.button1_Click);
//
// panelPreview
//
this.panelPreview.Location = new System.Drawing.Point(8, 8);
this.panelPreview.Name = "panelPreview";
this.panelPreview.Size = new System.Drawing.Size(344, 272);
this.panelPreview.TabIndex = 1;
//
// b_stop
//
this.b_stop.Enabled = false;
this.b_stop.Location = new System.Drawing.Point(360, 368);
this.b_stop.Name = "b_stop";
this.b_stop.TabIndex = 2;
this.b_stop.Text = "&Stop";
this.b_stop.Click += new System.EventHandler(this.b_stop_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.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 = "GoodView test Web Camera";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion


/**////
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.Run(new Form1());
}


private void Form1_Load(object sender, System.EventArgs e)
{
b_play.Enabled = false;
b_stop.Enabled = true;
panelPreview.Size = new Size(330,330);
wc = new WebCamera( panelPreview.Handle,panelPreview.Width,panelPreview.Height);
wc.StartWebCam();
}


private void button1_Click(object sender, System.EventArgs e)
{
b_play.Enabled = false;
b_stop.Enabled = true;
panelPreview.Size = new Size(330,330);
wc = new WebCamera( panelPreview.Handle,panelPreview.Width,panelPreview.Height);
wc.StartWebCam();
}


private void b_stop_Click(object sender, System.EventArgs e)
{
b_play.Enabled = true;
b_stop.Enabled = false;
wc.CloseWebcam();
}
}
}


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.