wpf显示视频,image控件闪屏,使用winform控件实现
使用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控件实现的更多相关文章
- Github 开源:升讯威 Winform 开源控件库( Sheng.Winform.Controls)
Github 地址:https://github.com/iccb1013/Sheng.Winform.Controls 本控件库中的代码大约写于10年前(2007年左右),难免有不成熟与欠考虑之处, ...
- WinForm控件开发总结目录
WinForm控件开发总结(一)------开篇 WinForm控件开发总结(二)------使用和调试自定义控件 WinForm控件开发总结(三)------认识WinForm控件常用的Attrib ...
- Winform 开源控件库( Sheng.Winform.Controls)
升讯威 .Net WinForm 控件库提供了超过15种 Winform 控件,你可以直接使用本控件库,更可以通过本控件库学到 Winform 控件开发的方法和理念. 你可以学习到: 如何基于 Con ...
- C# 解决ListView控件显示数据出现闪屏的问题
一.发现问题 如果发送数据过快的情况下,ListVies滚屏显示数据时会显示闪屏,如下所示现象: 二.解决问题 根据出现闪屏的情况,在网上查了资料要使用双缓存的办法来处理.其原理是数据在缓存区中进行处 ...
- 在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口
在我很早的WInform随笔<WinForm界面开发之"SplashScreen控件">有介绍如何使用闪屏的处理操作,不过那种是普通WInform和DevExpress ...
- Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)
本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...
- DevExpress21:SplashScreenManager控件实现启动闪屏和等待信息窗口
DevExpress中SplashScreenManager这个控件的主要作用就是显示程序集加载之前的进度条显示和进行耗时操作时候的等待界面. 一.SplashScreenManager控件的使用 1 ...
- C# WinForm中 让控件全屏显示的实现代码
夏荣全 ( lyout(at)163.com )原文 C#中让控件全屏显示的实现代码(WinForm) 有时候需要让窗口中某一块的内容全屏显示,比如视频播放.地图等等.经过摸索,暂时发现两种可行方法, ...
- mfc static控件 视频播放 闪屏问题 解决方案
方案1: 我昨天刚在csdn上解决了这个问题,不是双缓冲和WS_CLIPCHILDREN还有背景擦出什么的问题,就是在你重画的时候要去掉这些控件(按钮什么的)区域, 闪屏是因为窗口大小发生改变时,由于 ...
随机推荐
- vim_preview_window
*29.2* The preview window When you edit code that contains a function call, you need to use the c ...
- node学习----Promise 初见
今天在网上查看promise资料,发现promise有三种状态,pending,fullfilled,rejected.分别对应了初始化状态,成功状态及失败状态.为了理解写测试代码来实验:functi ...
- Oracle system 忘记密码,怎么修改密码
1.win键+R键,输入cmd,打开命令提示符.(小黑窗) 2.输入:sqlplus /nolog 3.输入conn /as sysdba(以超级管理员身份登录 4.输入alter user syst ...
- MySQL 字符串函数:字符串截取
1.left(name,4)截取左边的4个字符 列: ,) 年 结果:2018 2.right(name,2)截取右边的2个字符 ,) 月份 结果:09 3.SUBSTRING(name,5,3) 截 ...
- vue $set修改数组
看了别人写的,自己简单写一下自己的理解. 因为 JavaScript 的限制,Vue.js 不能检测到下面数组变化,所以,想要正常是不能通过操作数组来渲染dom的,解决的方法是通过set方法, 在组件 ...
- H5混合开发进阶
混合开发: 原生app里面,IOS 安卓的原生app里面,嵌套h5界面. 通过原生app里的一个webView盒子进行交互.webView是原生app内置的一个XXX,里面可以放置h5界面.可以相互调 ...
- jquery如何获取对应表单元素?
问题描述:我页面中有这样多个表单,我都是这个定义的,当我点击确定按钮时,此时能够获得相对应的表单对象,我该怎么获取到他的两个值呢? 解决方案: 页面元素 <form id="form1 ...
- Apache Struts最新漏洞 远程代码执行漏洞预警 2018年11月08日
2018年11月8日,SINE安全监控检测中心,检测到Apache Struts官方更新了一个Struts漏洞补丁,这个漏洞是Apache Struts目前最新的漏洞,影响范围较广,低于Apache ...
- 一个新晋IT行业的努力Duiker
亲爱的朋友,你好! 我很开心能以这么一篇博客来开始我的IT努力之路.我叫Duiker,是一名软件工程专业的学生,想通过写博客来提升自己,充实自我. 首先,我要确立自己的学习编程目标: 1.将算 ...
- 使用 -命令行-给-python-安装whl文件,
whl文件下载到哪个位置,命令行就切入到哪里: 我的在D盘目录下,所以命令行切进D盘(CD):方式如下: 列出<用户目录>下的目录(dir): 因为我安装了2个版本的python所以给py ...