C#攝像頭編程 錄制視頻后保存

zhangwangxian1989 2010-01-19 06:42:43
using System;
using System.Runtime.InteropServices;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.Drawing;

public class video
{

private IntPtr myHand;
private int myWidth;
private short myHeight;
private int myLeft;
private int myTop;

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;

}
[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);

private int hHwnd;

public video(IntPtr myPtr, int left, int top, int width, short height)
{
myHand = myPtr;
myLeft = left;
myTop = top;
myWidth = width;
myHeight = height;

}


public void opVideo()
{
int intDevice = 0;
string refDevice = intDevice.ToString();
hHwnd = capCreateCaptureWindowA(ref refDevice, 1342177280, 0, 0, 1024, 768, myHand.ToInt32(), 0);
if (SendMessage(hHwnd, 0x40a, intDevice, 0) > 0)
{
SendMessage(this.hHwnd, 0x435, -1, 0);
SendMessage(this.hHwnd, 0x434, 100, 0);
SendMessage(this.hHwnd, 0x432, -1, 0);
SetWindowPos(this.hHwnd, 1, 0, 0, myWidth, Convert.ToInt32(myHeight), 6);
}
else
{
DestroyWindow(this.hHwnd);
}
}

public void CloVideo()
{
SendMessage(this.hHwnd, 0x40b, 0, 0);
DestroyWindow(this.hHwnd);
}

public Image CatchVideo()
{
SendMessage(this.hHwnd, 0x41e, 0, 0);
IDataObject obj1 = Clipboard.GetDataObject();
Image getIma = null;
if (obj1.GetDataPresent(typeof(Bitmap)))
{
Image image1 = (Image)obj1.GetData(typeof(Bitmap));
getIma = image1;
}
return getIma;
}
public void GrabImage(string path)
{
try
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hHwnd, 0x400 + 25, 0, hBmp.ToInt64());
}
catch
{
}
}
public void Kinescope(string path)
{
try
{
IntPtr bBmp = Marshal.StringToHGlobalAnsi(path);
//不管我path寫成啥,都被保存在C盤目錄下面;怎么回事?
SendMessage(hHwnd, 0x400 + 20, 0, bBmp.ToInt64());
SendMessage(hHwnd, 0x400 + 62, 0, 0);
}
catch
{
}
}

public void StopKinescope()
{
SendMessage(hHwnd, 0x400 + 68, 0, 0);
}



}
...全文
226 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT_2007 2010-01-19
  • 打赏
  • 举报
回复
sf

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧