使用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 内存不足相关推荐

  1. C#操作Aforge摄像头 实现拍照、录像功能

    准备 添加引用 http://download.csdn.net/download/u011463646/10021001 .NET 2.0以上 你给项目添加.NET引用 找到Presentation ...

  2. C# 利用Aforge调用本机摄像头完成拍照,录像

    用C#做了一个简单的摄像头录像项目,记录一下. 实现功能 打开.关闭摄像头并显示相应画面 实现拍照功能 实现录像功能 实现保存图片.录像的功能 运行界面效果 winForm控件 首先安装NuGet程序 ...

  3. C# 使用AForge调用笔记本摄像头拍照及录像

    文章目录 1.添加引用 2.AForge相关类库介绍 3.WinForm界面实现 4.属性 5.窗口加载与关闭 6.实例化 7. 摄像头的连接读取与关闭 8.拍照与保存 9.录像 10.计时器 11. ...

  4. 摄像头拍照功能是怎样实现的?自己动手做一个!

    调用摄像头 需求分析 前期准备 设计流程 实现效果 重要代码 源码及程序整合 后续 需求分析 现如今,拍照已经融入我们的日常生活中了.我们在日常的工作生活中很多场景都会用到拍照功能.比如在登录网页或者 ...

  5. C#操作摄像头实现拍照监控录像功能

    从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能.其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个.本来是 ...

  6. c# 利用AForge和百度AI开发实时人脸识别

    baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能 人脸实时检测识别功能 思路是 ...

  7. android内存泄漏原因分析,android 内存泄漏问题

    内存泄露问题在一些压力测试的场景很容易暴露,例如一些常用应用场景反复操作(eg:反复切换前后摄像头,反复进入退出相机应用.压力拍照等等). 内存泄露一般表现为: ①内存分配释放,导致进程空间虚拟地址被 ...

  8. Linux内存管理、伙伴系统(buddy system)等知识点

    引入 之前写过一篇文章将伙伴系统,可以参考:内存池算法简介 物理内存由页分配器(page allocator)接管. 内存块的申请.释放过程. 伙伴算法.阶数. 2^0 为1 ,链表上存放的是一个pa ...

  9. C#关于摄像头的使用

    下载AForge类库,并添加引用: using AForge; using AForge.Controls; using AForge.Video; using AForge.Video.Direct ...

  10. C# 实现视频监控系统(附源码)

    去过工厂或者仓库的都知道,在工厂或仓库里面,会有很多不同的流水线,大部分的工厂或仓库,都会在不同流水线的不同工位旁边安装一台电脑,一方面便于工位上的师傅把产品的重要信息录入系统,便于公司系统数据采集分 ...

最新文章

  1. Linux CPU数量判断命令
  2. NLP数据科学家不会告诉你的残酷事实
  3. matlab 绘制孤立点
  4. 计算机会计学ufo报表,计算机会计实践部分工资管理系统.ppt
  5. Eclipse GBK批量转UTF-8插件
  6. Freenom.com的域名+github pages+netlify的CDN加速
  7. pygame只能编写游戏_游戏框架搭建
  8. jQuery1.4.2新特性
  9. 剖析ActiveX控件安全问题
  10. 敢闯会创,第七届中国国际“互联网+”双创大赛腾讯广告产业命题等你来战!
  11. uiautomatorviewer报错“Error taking device screenshot: EOF” ,
  12. [编程语言]C陷阱与缺陷
  13. cad图纸怎么看懂_教你看懂CAD图纸
  14. ios游戏开发 Sprite Kit教程:初学者 1
  15. 优秀的WBS的分解标准
  16. 很多的计算机英语词汇是通过,计算机英语词汇隐喻分析
  17. SWFObject Flash 增强插件
  18. Cygwin 安装使用
  19. 台式机计算机在哪里看,IT教程:台式电脑主板型号在哪里看
  20. 用Python爬取28010条《隐秘的角落》评论,我发现了这些...

热门文章

  1. JDK如何安装与配置环境变量
  2. JUnit 4 超详细教程(一)
  3. Verp中外部控制的六种方式
  4. 推荐一款免费开源的pdf编辑器
  5. esp32-cam拍照上传,微信小程序照片显示
  6. 网络通讯协议——TCP/IP协议
  7. 3D视觉传感技术:时间飞行法 (ToF) 技术分析
  8. 水经注下载的地图版权_如何使用水经注万能地图下载器下载谷歌卫星地图
  9. 水经注地图发布服务的安装与卸载
  10. 永久关闭iptables和selinux