AForge.net 录像拍照功能实现 转
AForge.net 使用之录像拍照功能实现
最近使用aforge.NET拍照录像功能实现 记录一下以便以后好学习,哈哈,直接上代码 连接摄像头设备,这里需要引入 AForge.Video; AForge.Video.DirectShow; AForge.Video.FFMPEG; 还需要添加引用,aforge.dll,aforge.control, 在工具箱中还需要添加AForge.Control,然后找到VideoSourcePlayer这个控件添加到界面上 然后定义变量 private FilterInfoCollection videoDevices;
private VideoCaptureDevice videoSource; private bool stopREC = true;
private bool createNewFile = true; private string videoFileFullPath = string.Empty; //视频文件全路径
private string imageFileFullPath = string.Empty; //图像文件全路径
private string videoPath = @"E:\video\"; //视频文件路径
private string imagePath = @"E:\video\images\"; //图像文件路径
private string videoFileName = string.Empty; //视频文件名
private string imageFileName = string.Empty; //图像文件名
private string drawDate = string.Empty;
private VideoFileWriter videoWriter = null; public delegate void MyInvoke(); //定义一个委托方法 string g_s_AutoSavePath = AppDomain.CurrentDomain.BaseDirectory + "Capture\\";
object objLock = new object(); //定义一个对象的锁
int frameRate = ; //默认帧率
private Stopwatch stopWatch = null;
IVideoSource iVideoSource = null; 复制代码
private void InitUI()
{
//连接 //开启摄像头
videoDevices = vh.GetDevices();
if (videoDevices != null && videoDevices.Count > )
{
videoSource = vh.VideoConnect();
}
videoSourcePlayer1.VideoSource = videoSource;
videoSourcePlayer1.Start();
}
复制代码
开始录像 复制代码
private void btnStartVideotape_Click(object sender, EventArgs e)
{
//开始录像
if (btnStartVideotape.Text == "开始录像")
{
stopREC = false;
frameRate = Convert.ToInt32(txtFrameRate.Text.Trim());
btnStartVideotape.Text = "停止录像";
}
else if (btnStartVideotape.Text == "停止录像")
{
stopREC = true;
btnStartVideotape.Text = "开始录像";
}
}
复制代码
添加aforge.Net的一个VideoSourcePlayer控件之后找到NewFrame事件,代码如下: 下面是控件的一个事件,是真正录像的代码 复制代码
private void videoSourcePlayer1_NewFrame(object sender, ref Bitmap image)
{
//录像
Graphics g = Graphics.FromImage(image);
SolidBrush drawBrush = new SolidBrush(Color.Yellow); Font drawFont = new Font("Arial", , FontStyle.Bold, GraphicsUnit.Millimeter);
int xPos = image.Width - (image.Width - );
int yPos = ;
//写到屏幕上的时间
drawDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); g.DrawString(drawDate, drawFont, drawBrush, xPos, yPos);
if (!Directory.Exists(videoPath))
Directory.CreateDirectory(videoPath); //创建文件路径
//fileFullPath = path + fileName; if (stopREC)
{
stopREC = true;
createNewFile = true; //这里要设置为true表示要创建新文件
if (videoWriter != null)
videoWriter.Close();
}
else
{
//开始录像
if (createNewFile)
{
videoFileName = DateTime.Now.ToString("yyyy.MM.dd HH.mm.ss") + ".avi";
videoFileFullPath = videoPath + videoFileName;
createNewFile = false;
if (videoWriter != null)
{
videoWriter.Close();
videoWriter.Dispose();
}
videoWriter = new VideoFileWriter();
//这里必须是全路径,否则会默认保存到程序运行根据录下了
videoWriter.Open(videoFileFullPath, image.Width, image.Height, frameRate, VideoCodec.MPEG4);
videoWriter.WriteVideoFrame(image);
}
else
{
videoWriter.WriteVideoFrame(image);
}
}
}
复制代码
拍照代码 复制代码
/// <summary>
/// 手动拍照或抓图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCapture_Click(object sender, EventArgs e)
{
try
{
int number=;
number++;
string fileImageName = g_s_RequestNo + "-" + number + ".bmp";
string fileCapturePath = g_s_AutoSavePath + g_s_RequestNo + "\\";
if (!Directory.Exists(fileCapturePath))
Directory.CreateDirectory(fileCapturePath); //抓到图保存到指定路径
Bitmap bmp = null;
bmp = videoSourcePlayer1.GetCurrentVideoFrame();
if (bmp == null)
{
MessageBox.Show("捕获图像失败!", "提示");
return;
} bmp.Save(fileCapturePath + fileImageName, ImageFormat.Bmp); }
catch (Exception ex)
{
MessageBox.Show("捕获图像失败!" + ex.Message, "提示");
}
}
AForge.net 使用之录像拍照功能实现
最近使用aforge.NET拍照录像功能实现
记录一下以便以后好学习,哈哈,直接上代码
连接摄像头设备,这里需要引入
AForge.Video;
AForge.Video.DirectShow;
AForge.Video.FFMPEG;
还需要添加引用,aforge.dll,aforge.control,
在工具箱中还需要添加AForge.Control,然后找到VideoSourcePlayer这个控件添加到界面上
然后定义变量
private FilterInfoCollection videoDevices;
private VideoCaptureDevice videoSource;
private bool stopREC = true;
private bool createNewFile = true;
private string videoFileFullPath = string.Empty; //视频文件全路径
private string imageFileFullPath = string.Empty; //图像文件全路径
private string videoPath = @"E:\video\"; //视频文件路径
private string imagePath = @"E:\video\images\"; //图像文件路径
private string videoFileName = string.Empty; //视频文件名
private string imageFileName = string.Empty; //图像文件名
private string drawDate = string.Empty;
private VideoFileWriter videoWriter = null;
public delegate void MyInvoke(); //定义一个委托方法
string g_s_AutoSavePath = AppDomain.CurrentDomain.BaseDirectory + "Capture\\";
object objLock = new object(); //定义一个对象的锁
int frameRate = 20; //默认帧率
private Stopwatch stopWatch = null;
IVideoSource iVideoSource = null;

private void InitUI()
{
//连接
//开启摄像头
videoDevices = vh.GetDevices();
if (videoDevices != null && videoDevices.Count > 0)
{
videoSource = vh.VideoConnect();
}
videoSourcePlayer1.VideoSource = videoSource;
videoSourcePlayer1.Start();
}

开始录像

private void btnStartVideotape_Click(object sender, EventArgs e)
{
//开始录像
if (btnStartVideotape.Text == "开始录像")
{
stopREC = false;
frameRate = Convert.ToInt32(txtFrameRate.Text.Trim());
btnStartVideotape.Text = "停止录像";
}
else if (btnStartVideotape.Text == "停止录像")
{
stopREC = true;
btnStartVideotape.Text = "开始录像";
}
}

添加aforge.Net的一个VideoSourcePlayer控件之后找到NewFrame事件,代码如下:
下面是控件的一个事件,是真正录像的代码

private void videoSourcePlayer1_NewFrame(object sender, ref Bitmap image)
{
//录像
Graphics g = Graphics.FromImage(image);
SolidBrush drawBrush = new SolidBrush(Color.Yellow); Font drawFont = new Font("Arial", 6, FontStyle.Bold, GraphicsUnit.Millimeter);
int xPos = image.Width - (image.Width - 15);
int yPos = 10;
//写到屏幕上的时间
drawDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); g.DrawString(drawDate, drawFont, drawBrush, xPos, yPos);
if (!Directory.Exists(videoPath))
Directory.CreateDirectory(videoPath); //创建文件路径
//fileFullPath = path + fileName; if (stopREC)
{
stopREC = true;
createNewFile = true; //这里要设置为true表示要创建新文件
if (videoWriter != null)
videoWriter.Close();
}
else
{
//开始录像
if (createNewFile)
{
videoFileName = DateTime.Now.ToString("yyyy.MM.dd HH.mm.ss") + ".avi";
videoFileFullPath = videoPath + videoFileName;
createNewFile = false;
if (videoWriter != null)
{
videoWriter.Close();
videoWriter.Dispose();
}
videoWriter = new VideoFileWriter();
//这里必须是全路径,否则会默认保存到程序运行根据录下了
videoWriter.Open(videoFileFullPath, image.Width, image.Height, frameRate, VideoCodec.MPEG4);
videoWriter.WriteVideoFrame(image);
}
else
{
videoWriter.WriteVideoFrame(image);
}
}
}

拍照代码

/// <summary>
/// 手动拍照或抓图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCapture_Click(object sender, EventArgs e)
{
try
{
int number=0;
number++;
string fileImageName = g_s_RequestNo + "-" + number + ".bmp";
string fileCapturePath = g_s_AutoSavePath + g_s_RequestNo + "\\";
if (!Directory.Exists(fileCapturePath))
Directory.CreateDirectory(fileCapturePath); //抓到图保存到指定路径
Bitmap bmp = null;
bmp = videoSourcePlayer1.GetCurrentVideoFrame();
if (bmp == null)
{
MessageBox.Show("捕获图像失败!", "提示");
return;
} bmp.Save(fileCapturePath + fileImageName, ImageFormat.Bmp); }
catch (Exception ex)
{
MessageBox.Show("捕获图像失败!" + ex.Message, "提示");
}
}
AForge.net 录像拍照功能实现 转的更多相关文章
- AForge.net 使用之录像拍照功能实现
连接摄像头设备,这里需要引入 AForge.Video; AForge.Video.DirectShow; AForge.Video.FFMPEG; 还需要添加引用,aforge.dll,aforge ...
- C# - VS2019调用AForge库实现调用摄像头拍照功能
前言 作为一名资深Delphi7程序员,想要实现摄像头扫描一维码/二维码功能,发现所有免费的第三方库都没有简便的实现办法,通用的OpenCV或者ZXing库基本上只支持XE以上的版本,而且一维码的识别 ...
- C#操作摄像头 实现拍照功能
从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能.其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个.本来是 ...
- Android开发 Camera2开发_1_拍照功能开发
介绍 google已经在Android5.1之后取消了对Camera1的更新,转而提供了功能更加强大的Camera2.虽然新版本依然可以使用Camera1但是,不管是各种机型适配还是拍照参数自定义都是 ...
- UWP开发之Template10实践二:拍照功能你合理使用了吗?(TempState临时目录问题)
最近在忙Asp.Net MVC开发一直没空更新UWP这块,不过有时间的话还是需要将自己的经验和大家分享下,以求共同进步. 在上章[UWP开发之Template10实践:本地文件与照相机文件操作的MVV ...
- 文件件监听器,android系统拍照功能调用后删除系统生成的照片
先说说要实现的功能: android调用系统拍照功能实时 预览 删除 上传 保存 (用户不能再本地文件夹中看到拍的照片) 再说说遇到的问题: 1.调用系统拍照在系统自带的拍照文件夹中生成一张随机命名图 ...
- ios照片获取,拍照功能
// // HYBPhotoPickerManager.h // ehui // // Created by 黄仪标 on 14/11/26. // Copyright (c) 2014年 黄 ...
- Android--启动拍照功能并返回结果
因为没有深入学习拍照这块功能,所以只是简单的调用了一下系统的拍照功能,下面代码: //拍照的方法 private void openTakePhoto(){ /** * 在启动拍照之前最好先判断一下s ...
- Cocos2d-x使用android拍照功能加载照片内存过大,通过另存照片尺寸大小解决
使用2dx调用android拍照功能,拍照结束后在2dx界面显示拍照照片,如果不对照片做处理,会出现内存过大的问题,导致程序崩溃,如果仅仅另存拍照照片,则照片质量大小均下降,导致照片不够清晰,后来发现 ...
随机推荐
- Catch That Cow(bfs)
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- Java中long和Long的区别
Java的数据类型分两种: 1.基本类型:long,int,byte,float,double,char,short,boolean 2. 对象类型(类): Long,Integer,Byte,Flo ...
- Python_13-Office文件数据操作
目录: 1.1 安装win32com模块 1.2 Access数据库操作 1.2.1 建立db1.db数据库,设计一张表t_student_b 1.3 Exc ...
- 算法技巧讲解》关于对于递推形DP的前缀和优化
这是在2016在长沙集训的第三天,一位学长讲解了“前缀和优化”这一技巧,并且他这一方法用的很6,个人觉得很有学习的必要. 这一技巧能使线性递推形DP的速度有着飞跃性的提升,从O(N2)优化到O(N)也 ...
- 用C/C++扩展你的PHP
PHP取得成功的一个主要原因之一是她拥有大量的可用扩展.web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到.PHP发行包包括支持各种数据库,图形文件格式,压缩,XML技术扩展在内的许多扩 ...
- ARCGIS中怎么去除重复的面?(转)
ARCGIS中怎么去除重复的面? https://blog.csdn.net/gswwldp/article/details/66974522 第一种: 1.用polygon to line将面转 ...
- Tensorflow学习(练习)—CPU训练模型
Mask R-CNN - Train on Shapes Dataset This notebook shows how to train Mask R-CNN on your own dataset ...
- 跨平台的图形软件Dia
一款非常不错的软件Dia,软件很小,免费.好用.跨平台(linux.windows.mac).可导出多种格式图片,除了流程图.UML建模图,还可以绘制其他很多图. ubuntu下可以直接通过命令行su ...
- PHP解决跨域访问的问题
在控制器的第一行放如下代码即可解决 header('Access-Control-Allow-Origin: http://ding.taozugong.com'); header('Access-C ...
- Machine Learning and Data Mining(机器学习与数据挖掘)
Problems[show] Classification Clustering Regression Anomaly detection Association rules Reinforcemen ...