AForge 拍照 GetCurrentVideoFrame().GetHbitmap 内存不足
使用AForge 控制高拍仪来拍照,遇到提示“内存不足”的错误,查了一些资料后,发现有个对象没有进行释放。
以下红字部分即为 增加的销毁对象方法。
//
int flag = 0;
private void videoDevice_Acqution()
{
if (flag == 1) return;
if (this.videoSourcePlayer.Visible == false)
{
this.kpImageViewer1.Visible = false;
this.axWindowsMediaPlayer1.Visible = false;
this.axFramerControl1.Visible = false;
this.axWebBrowser1.Visible = false;
this.videoSourcePlayer.Visible = true;
this.videoSourcePlayer.BringToFront();
}
if (videoSourcePlayer.GetCurrentVideoFrame() == null) return;
//校验是否为可扫项
if (!this.checkIsScanable(this.treeView1.SelectedNode)) return;
if (flag == 0)
{
flag = 1;
Bitmap bmpNew = null;
string fileName = "";
string img = "";
Graphics g = null;
Bitmap bitmap = null;
try
{
IntPtr hbitmap = videoSourcePlayer.GetCurrentVideoFrame().GetHbitmap();
bitmap = System.Drawing.Image.FromHbitmap(hbitmap);
fileName = DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".jpg";
img = this.docFolder + "/" + fileName;
bmpNew = new Bitmap(bitmap.Width, bitmap.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
g = Graphics.FromImage(bmpNew);
g.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
g.Dispose();
bitmap.Dispose();
//销毁对象 否则会内存溢出
DeleteObject(hbitmap);
}
catch {
flag = 0;
if (g != null)
g.Dispose();
if (bitmap != null)
bitmap.Dispose();
return;
}
//判断高拍仪设置的旋转角度
string rotate = "0";
if (videoSourcePlayer.Text.Equals("master")){
rotate = (String)master["rotate"];
}else if(videoSourcePlayer.Text.Equals("slave")){
rotate = (String)slave["rotate"];
}
if ("90".Equals(rotate.Trim())) {
bmpNew.RotateFlip(RotateFlipType.Rotate90FlipNone);
}else if("180".Equals(rotate.Trim())){
bmpNew.RotateFlip(RotateFlipType.Rotate180FlipNone);
}else if("270".Equals(rotate.Trim())){
bmpNew.RotateFlip(RotateFlipType.Rotate270FlipNone);
}
bmpNew.Save(img, ImageFormat.Jpeg);
this.addNewTreeNode(fileName);
//更新状态栏信息start
calJnxxScanPro(false);
//更新状态栏信息end
flag = 0;
}
}
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);
AForge 拍照 GetCurrentVideoFrame().GetHbitmap 内存不足相关推荐
- C#操作Aforge摄像头 实现拍照、录像功能
准备 添加引用 http://download.csdn.net/download/u011463646/10021001 .NET 2.0以上 你给项目添加.NET引用 找到Presentation ...
- C# 利用Aforge调用本机摄像头完成拍照,录像
用C#做了一个简单的摄像头录像项目,记录一下. 实现功能 打开.关闭摄像头并显示相应画面 实现拍照功能 实现录像功能 实现保存图片.录像的功能 运行界面效果 winForm控件 首先安装NuGet程序 ...
- C# 使用AForge调用笔记本摄像头拍照及录像
文章目录 1.添加引用 2.AForge相关类库介绍 3.WinForm界面实现 4.属性 5.窗口加载与关闭 6.实例化 7. 摄像头的连接读取与关闭 8.拍照与保存 9.录像 10.计时器 11. ...
- 摄像头拍照功能是怎样实现的?自己动手做一个!
调用摄像头 需求分析 前期准备 设计流程 实现效果 重要代码 源码及程序整合 后续 需求分析 现如今,拍照已经融入我们的日常生活中了.我们在日常的工作生活中很多场景都会用到拍照功能.比如在登录网页或者 ...
- C#操作摄像头实现拍照监控录像功能
从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能.其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个.本来是 ...
- c# 利用AForge和百度AI开发实时人脸识别
baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能 人脸实时检测识别功能 思路是 ...
- android内存泄漏原因分析,android 内存泄漏问题
内存泄露问题在一些压力测试的场景很容易暴露,例如一些常用应用场景反复操作(eg:反复切换前后摄像头,反复进入退出相机应用.压力拍照等等). 内存泄露一般表现为: ①内存分配释放,导致进程空间虚拟地址被 ...
- Linux内存管理、伙伴系统(buddy system)等知识点
引入 之前写过一篇文章将伙伴系统,可以参考:内存池算法简介 物理内存由页分配器(page allocator)接管. 内存块的申请.释放过程. 伙伴算法.阶数. 2^0 为1 ,链表上存放的是一个pa ...
- C#关于摄像头的使用
下载AForge类库,并添加引用: using AForge; using AForge.Controls; using AForge.Video; using AForge.Video.Direct ...
- C# 实现视频监控系统(附源码)
去过工厂或者仓库的都知道,在工厂或仓库里面,会有很多不同的流水线,大部分的工厂或仓库,都会在不同流水线的不同工位旁边安装一台电脑,一方面便于工位上的师傅把产品的重要信息录入系统,便于公司系统数据采集分 ...
最新文章
- Linux CPU数量判断命令
- NLP数据科学家不会告诉你的残酷事实
- matlab 绘制孤立点
- 计算机会计学ufo报表,计算机会计实践部分工资管理系统.ppt
- Eclipse GBK批量转UTF-8插件
- Freenom.com的域名+github pages+netlify的CDN加速
- pygame只能编写游戏_游戏框架搭建
- jQuery1.4.2新特性
- 剖析ActiveX控件安全问题
- 敢闯会创,第七届中国国际“互联网+”双创大赛腾讯广告产业命题等你来战!
- uiautomatorviewer报错“Error taking device screenshot: EOF” ,
- [编程语言]C陷阱与缺陷
- cad图纸怎么看懂_教你看懂CAD图纸
- ios游戏开发 Sprite Kit教程:初学者 1
- 优秀的WBS的分解标准
- 很多的计算机英语词汇是通过,计算机英语词汇隐喻分析
- SWFObject Flash 增强插件
- Cygwin 安装使用
- 台式机计算机在哪里看,IT教程:台式电脑主板型号在哪里看
- 用Python爬取28010条《隐秘的角落》评论,我发现了这些...