问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用c#调用摄像头做录像功能

发布网友 发布时间:2024-10-08 13:14

我来回答

4个回答

热心网友 时间:2024-10-10 23:23

前段时间刚做了个监控系统,有不明白+qq 51076008

using System.Runtime.InteropServices;
using System.Drawing;
using System.Drawing.Imaging;
using System;

namespace CamTest2
{
/// <summary>
/// 一个控制摄像头的类
/// </summary>
public class Pick
{
private const int WM_USER = 0x400;
private const int WS_CHILD = 0x40000000;
private const int WS_VISIBLE = 0x10000000;
private const int WM_CAP_START = WM_USER;
private const int WM_CAP_STOP = WM_CAP_START + 68;
private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
private const int WM_CAP_SAVEDIB = WM_CAP_START + 25;
private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
private const int WM_CAP_SEQUENCE = WM_CAP_START + 62;
private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63;
private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51;
private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;
private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2;
private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3;
private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5;
private const int WM_CAP_SET_SCALE = WM_CAP_START + 53;
private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52;
private const int WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41;
private const int WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42;
private const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43;
private const int WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46;

private IntPtr hWndC;
private bool bStat = false;

private IntPtr mControlPtr;
private int mWidth;
private int mHeight;
private int mLeft;
private int mTop;

/// <summary>
/// 初始化摄像头
/// </summary>
/// <param name="handle">控件的句柄</param>
/// <param name="left">开始显示的左边距</param>
/// <param name="top">开始显示的上边距</param>
/// <param name="width">要显示的宽度</param>
/// <param name="height">要显示的长度</param>
public Pick(IntPtr handle, int left, int top, int width, int height)
{
mControlPtr = handle;
mWidth = width;
mHeight = height;
mLeft = left;
mTop = top;
}

[DllImport("avicap32.dll")]
private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);

[DllImport("avicap32.dll")]
private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);
[DllImport("User32.dll")]
private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, long lParam);

public void capDlgVideoFormat()
{
Boolean capDlgVideoFormat = SendMessage(hWndC, WM_CAP_DLG_VIDEOFORMAT, 0, 0);

}
public void capDlgVideoSource()
{
Boolean capDlgVideoSource = SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0);

}
public void capDlgVideoDisplay()
{
Boolean capDlgVideoDisplay = SendMessage(hWndC, WM_CAP_DLG_VIDEODISPLAY, 0, 0);
}
public void capDlgVideoCompression()
{
Boolean capDlgVideoCompression = SendMessage(hWndC, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0);

}

/// <summary>
/// 开始显示图像
/// </summary>
public void Start()
{
if (bStat)
return;

bStat = true;
byte[] lpszName = new byte[100];

hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);

if (hWndC.ToInt32() != 0)
{
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
}

return;

}

/// <summary>
/// 停止显示
/// </summary>
public void Stop()
{
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
bStat = false;
}

/// <summary>
/// 抓图
/// </summary>
/// <param name="path">要保存bmp文件的路径</param>
public void GrabImage(string path)
{

IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt64());

}

/// <summary>
/// 录像
/// </summary>
/// <param name="path">要保存avi文件的路径</param>
public void Kinescope(string path)
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);

SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt64());

SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);

}

/// <summary>
/// 停止录像
/// </summary>
public void StopKinescope()
{
SendMessage(hWndC, WM_CAP_STOP, 0, 0);
}
/* public void cap()
{
CAPTUREPARMS s;
capCaptureGetSetup(m_caphwnd,&s,sizeof(CAPTUREPARMS));//取得采集参数
s.dwRequestMicroSecPerFrame = 33333;//采集一帧花费1/30秒
s.fAbortLeftMouse = FALSE;//压下鼠标左键不终止采集
s.fAbortRightMouse = FALSE;//压下鼠标右键不终止采集
s.fCaptureAudio = TRUE;//c采集音频
s.fYield = TRUE;//使用一个独立的线程来采集视频,不使用View窗口线程
capCaptureSetSetup(m_caphwnd,&s,sizeof(CAPTUREPARMS));//设定采集参数

}*/
}
}

热心网友 时间:2024-10-10 23:24

C#项目开发全程实录

热心网友 时间:2024-10-10 23:23

C# 有这方面的类库,你看一下,
操作视频不难,也有第三方的收费插件(比较专业).
你自己可以衡量一下.

热心网友 时间:2024-10-10 23:23

你可以去买本书《C#项目开发全程实录》-清华大学出版社 里面第一章就是讲的《家庭视频监控系统》,这本书还附有光盘源码。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
桃李芬芳的近义词是? 请会答正确。 急... 墨西哥很混乱吗 为什么我的OPPOR9手机连接到任何蓝牙设备放歌曲,都没有办法在蓝牙设备... OPPOA9如何连接酷狗与手机蓝牙? 华为荣耀3X 白色畅玩版的声音调至最大声仍很小声 荣耀3x刷机后卸载了一些系统软件,然后就无法开机,一直停留在开机界面... 平安富赢金生年金保险值得买吗?最全产品测评! 收音机音量旋钮音量最大还是小 德生pl_450收音机音量电位器声音惑大惑小,电位器的型号是什么_百度知 ... 浙江金融学院有什么专业 开发一款android手机游戏都需要什么?游戏引擎什么的是必要的吗?有什么... 请帮忙查询下苹果7p型号MNRL2CH/A序列号F2LT2C8THG02是不是国行... Principle 学习笔记 关于医药类技术合同认定的规定有哪些? 为什么猫咪用舌头舔人脸 辩论赛的意义,对于辩手和观众,分别有什么意义? OPPO手机里的3g开关不见了!是系统升级造成的吗? 国际品牌手表有哪些品牌 国际名牌手表有哪些 梦见龙灯来贺喜,说给的礼金少了.我给灯头就吵架了 我不知道怎么向男朋友说这一切 ...男朋友担心所以没告诉他、当他从别人那里知道了会生气么? 衣服被撕破了,这事应该告诉男友吗? ...的战争名人,为他写一段评论性的文字。 人物: 我的评论: 2024陕西中考体育项目有哪些 2024年江苏苏州中考体育考试项目有哪些? 江南十校考400分能上一本吗 ...的的声音,他也没有TiMi的画面,是手机问题吗? 宏实中学现在的宏实中学 Android 2.2 与Android2.2.1 API 有啥不同? 是否更新了有关gps方面内容... 如何嵌入flash代码 使得客户机可以调用web服务器摄像头 看到实时... 求推荐一款百元以内的路由器 为什么我们寝室不能同时五台电脑上网? 寝室只有一个网通接口, 五台电脑 用什么? 会不会卡? 宿舍上网插口不够 用交换机还是路由器啊 ...总是梦见他回来,好几个人也跟我说过梦见他回来, 是要回来了吗... 杨诚的《西望乐山》花絮 胡应明主要作品 哪里可以买到腾讯血糖仪呢? 韩企名称中的“株式会社”是什么意思? 天台山镇新农村建设 天台山镇历史沿革 成都天台山旅游区的介绍 天台山镇的地理环境 人工智能涉及哪些知识 人工智能有哪些基础知识? 弱弱的问一句,怎么才能知道加自己微信的人是谁啊 弱弱的问一下 微信在波兰能用吗 弱弱的问下,男生女生都各自回答下自己角度的思想 现在相亲,基本都是... 弱弱问下,你们会主动添加领导微信吗