使用C#调用mingw的动态库实现视频识别软件,程序通过C++调用opencv打开视频,将图像的原始数据以rgb24的方式传递给C#端,C#通过构造图像对象给控件赋值的方式显示图片。

一开始使用wpf的控件image:

 while (true)
{
S_IMG simg = Mingw.display(); //调用取图像函数
int size = simg.w * simg.h * ;
byte[] data = new byte[size];
Marshal.Copy(simg.pbuf, data, , size);
Dispatcher.Invoke((EventHandler)delegate
{
WriteableBitmap bitmap = new WriteableBitmap(simg.w, simg.h, , , PixelFormats.Rgb24, null);
bitmap.WritePixels(new Int32Rect(, , simg.w, simg.h), data, simg.w * , );
img1.Source = bitmap;
BitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
encoder.Save(new System.IO.FileStream(pics.ToString()+".jpg", System.IO.FileMode.Create));
pics++;
}, new object[]);
}

其中img1是图像控件。

此方法显示视频时,如果帧率过高(测试时打开了一个AVI文件,读取帧的时候没有延时)则图像会闪黑屏。一开始怀疑是C++部分程序多线程同步问题,后来加入了第12~15行代码,将C#收到的图像保存下来,结果图片完全没问题,就是image控件显示时出现了黑屏情况。经调试无效后,决定使用winform的图像控件。

首先在工程中引用:

  System.Windows.Froms

  WindowsFormsIntegration

然后在xaml中添加:

  xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"

  xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

在控件处添加:

  <WindowsFormsHost Name="windowsFormsHost1" Grid.Row="1" Grid.Column="0">
    <wf:PictureBox Name="picturebox1"/>
  </WindowsFormsHost>

在C#代码中添加:

  public System.Windows.Forms.PictureBox picb1;

初始化时添加:

  picb1 = windowsFormsHost1.Child as System.Windows.Forms.PictureBox;

显示代码:

 while (true)
{
S_IMG simg = Mingw.display(); //调用取图像函数
Dispatcher.Invoke((EventHandler)delegate
{
System.Drawing.Bitmap bitmap=new Bitmap(simg.w,simg.h,simg.w*,System.Drawing.Imaging.PixelFormat.Format24bppRgb,simg.pbuf);
picb1.Image=bitmap;
}, new object[]);
}

就不闪了,代码也清爽多了。不过wpf和winform的图像像素格式是反的,分不清哪个是RGB哪个是BGR了。

wpf显示视频,image控件闪屏,使用winform控件实现的更多相关文章

  1. Github 开源:升讯威 Winform 开源控件库( Sheng.Winform.Controls)

    Github 地址:https://github.com/iccb1013/Sheng.Winform.Controls 本控件库中的代码大约写于10年前(2007年左右),难免有不成熟与欠考虑之处, ...

  2. WinForm控件开发总结目录

    WinForm控件开发总结(一)------开篇 WinForm控件开发总结(二)------使用和调试自定义控件 WinForm控件开发总结(三)------认识WinForm控件常用的Attrib ...

  3. Winform 开源控件库( Sheng.Winform.Controls)

    升讯威 .Net WinForm 控件库提供了超过15种 Winform 控件,你可以直接使用本控件库,更可以通过本控件库学到 Winform 控件开发的方法和理念. 你可以学习到: 如何基于 Con ...

  4. C# 解决ListView控件显示数据出现闪屏的问题

    一.发现问题 如果发送数据过快的情况下,ListVies滚屏显示数据时会显示闪屏,如下所示现象: 二.解决问题 根据出现闪屏的情况,在网上查了资料要使用双缓存的办法来处理.其原理是数据在缓存区中进行处 ...

  5. 在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口

    在我很早的WInform随笔<WinForm界面开发之"SplashScreen控件">有介绍如何使用闪屏的处理操作,不过那种是普通WInform和DevExpress ...

  6. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  7. DevExpress21:SplashScreenManager控件实现启动闪屏和等待信息窗口

    DevExpress中SplashScreenManager这个控件的主要作用就是显示程序集加载之前的进度条显示和进行耗时操作时候的等待界面. 一.SplashScreenManager控件的使用 1 ...

  8. C# WinForm中 让控件全屏显示的实现代码

    夏荣全 ( lyout(at)163.com )原文 C#中让控件全屏显示的实现代码(WinForm) 有时候需要让窗口中某一块的内容全屏显示,比如视频播放.地图等等.经过摸索,暂时发现两种可行方法, ...

  9. mfc static控件 视频播放 闪屏问题 解决方案

    方案1: 我昨天刚在csdn上解决了这个问题,不是双缓冲和WS_CLIPCHILDREN还有背景擦出什么的问题,就是在你重画的时候要去掉这些控件(按钮什么的)区域, 闪屏是因为窗口大小发生改变时,由于 ...

随机推荐

  1. Vue nodejs商城项目-商品列表页面组件

    data(){        return {            goodsList:[], // 商品列表            priceFilter:[ // 价格区间数组          ...

  2. 监控tomcat工具使用

    用LambdaProbe监控Tomcat 简介: Lambda Probe(以前称为Tomcat Probe)是一款实时监控和管理的Apache Tomcat实例的基本工具.Lambda Probe ...

  3. [SCOI2009]windy数(数位DP)

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? 输入输出格式 输 ...

  4. [SDOI2008]仪仗队(欧拉筛裸题)

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如右图 ...

  5. MySQL传输表空间使用方法

    1.目标端创建同样的表结构 CREATE TABLE `test` (       `id` int(11) DEFAULT NULL     ) ENGINE=InnoDB DEFAULT CHAR ...

  6. 路由器基础配置之广播多路访问链路上的ospf

    我们将以上面的拓扑图进行实验,因为是要以不断广播的形式进行ospf,所有中间加了一个集线器,这种ospf和前一种不同,路由器之间会在配置好ospf之后选举出一个老大,DR,一个备份,BDR,而其他路由 ...

  7. Linux系统定时任务crond那些事

    1 Linux系统定时任务 1.1 定时任务介绍 1.1.1 Crond是什么? Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件.Centos5/ linux系统安装完操作 ...

  8. Windows之cmd指令

    gpedit.msc-----本地计算机策略sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 logoff------- ...

  9. 关于SSM项目注解事务不回滚的问题

    <!--扫描service包(包含子包)下所有使用注解的类型--> <context:component-scan base-package="com.song.ssm.s ...

  10. C#5.0异步编程 HttpClient IP代理验证原码

    //访问HttpClient 代码 public async Task<string> VerifyProxy(string url, string proxy = "" ...