WPF特效-绘制实时2D激光雷达图
接前两篇:
https://blog.csdn.net/u013224722/article/details/80738619
https://blog.csdn.net/u013224722/article/details/80738995
除了c# GDI 、Opencv(c++)、 c# Emgu绘图外,其实c# WPF绘图功能也很强大。上文中之所以最终使用了Emgu绘图 ,只是因为在踩坑过程中尝试使用了Emgu的图像处理函数。 即首先将List<double>的数据集合处理成DrawingImage然后得到RenderTargetBitmap,再转换为System.Drawing.Bitmap 再转换为Emgu.CV.Image。 所以后续的实验中直接就使用了Emgu绘图,处理完成后转换为BitmapSource在WPF界面呈现。其实完全使用WPF的绘图方式也能实现实时雷达图效果。
如:
绘制效率也挺不错的。上面的Gif,每秒10帧,每帧760个数据点。 显示成弧形是因为我将数据截断了,即设定了最大值范围,超过了则等于设定的最大值。
#region Data Processing
private DrawingGroup DrawingGroup;
private void InitRadarVisualDraw()
{
this.DrawingGroup = new DrawingGroup();
DrawingImage oImgSrc = new DrawingImage(this.DrawingGroup);
this.ImgMainZm.Source = oImgSrc;
this.ImgMainZm.Height = this.RadarRadius;
this.ImgMainZm.Width = this.RadarRadius * 1920d / 1080d;
this.IntervalDegree = 240d / 760d;
}
private double RadarRadius = 1000d;
private double IntervalDegree = 0;
private void DrawRadarDatas(List<double> ltDistances)
{
try
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
using (DrawingContext oDrawContent = this.DrawingGroup.Open())
{
oDrawContent.DrawRectangle(new SolidColorBrush(Colors.Black), new Pen(),
new Rect(0, 0, this.ImgMainZm.Width, this.ImgMainZm.Height));
oDrawContent.DrawEllipse(new SolidColorBrush(Colors.Green), new Pen(),
new Point(this.ImgMainZm.Width/2d, this.ImgMainZm.Height-10), 10, 10);
for (int i = 0; i < ltDistances.Count; i++)
{
double lDistance = ltDistances[i];
double dDegree = -120d + i * this.IntervalDegree;
double dRadian = Utilitys.ConvertToRads(dDegree);
double dX = this.ImgMainZm.Width / 2d + lDistance * Math.Sin(dRadian);
if (dX < 0)
dX = 0;
if (dX > this.ImgMainZm.Width)
dX = this.ImgMainZm.Width;
double dY = lDistance * Math.Cos(dRadian);
oDrawContent.DrawEllipse(new SolidColorBrush(Colors.Green), new Pen(),
new Point(dX, dY), 3, 3);
}
}
}));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
#endregion
WPF特效-绘制实时2D激光雷达图的更多相关文章
- WPF特效-实现弧形旋转轮播图
原文:WPF特效-实现弧形旋转轮播图 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013224722/article/details/77004 ...
- C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码
原文:C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码 C#WPF 如何绘制几何图形? 怎么绘制坐标系?绘制sin曲线(正弦曲线)? 这离不开Path(Syst ...
- WPF中使用amCharts绘制股票K线图
原文:WPF中使用amCharts绘制股票K线图 本想自己用GDI绘图, 通过数据直接绘制一张蜡柱图, 但觉得这样子的功能比较少, 所以到网上搜索一些能画出K线图的控件. 发现DynamicDataD ...
- 【HAPPY FOREST】用Unreal Engine4绘制实时CG影像
用Unreal Engine绘制实时CG影像 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么容易.这里就有影像业界的先锋进行挑战的MARZA ANIMATION PLAN ...
- .NET实时2D渲染入门·动态时钟
.NET实时2D渲染入门·动态时钟 从小以来"坦克大战"."魂斗罗"等游戏总令我魂牵梦绕.这些游戏的基础就是2D实时渲染,以前没意识,直到后来找到了Direct ...
- canvas 2d 贴图技术实践
最近在公司内部的技术协会论坛里闲逛的时候,无意中发现了一篇手淘前端大牛岑安两年前写的博文,讲述了canvas的2d贴图技术.看到后觉得相当神奇.于是就自己实现了一下.不过岑安前辈的那篇博文也只是大概讲 ...
- WPF学习05:2D绘图 使用Transform进行控件变形
在WPF学习04:2D绘图 使用Shape绘基本图形中,我们了解了如何绘制基本的图形. 这一次,我们进一步,研究如何将图形变形. 例子 一个三角形,经Transform形成组合图形: XAML代码: ...
- 第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)
数据分布图简介 中医上讲看病四诊法为:望闻问切.而数据分析师分析数据的过程也有点相似,我们需要望:看看数据长什么样:闻:仔细分析数据是否合理:问:针对前两步工作搜集到的问题与业务方交流:切:结合业务方 ...
- 12-UIKit(View绘制、绘制曲线、绘制文字、贴图)
目录: 1. View绘制 2. 绘制曲线 3. 绘制文字 4. 贴图 回到顶部 1. View绘制 1.1 做出自己的视图对象 TRCell : UITableViewCell : UIView U ...
随机推荐
- [AngularFire2] Building an Authentication Observable Data Service
After successfully login, we want something help to check whether user has already login or not. And ...
- yield return
一次被yield return坑的历程. 事情的经过是这样的: 我用C#写了一个很简单的一个通过迭代生成序列的函数. public static IEnumerable<T> Iter ...
- Qt5 编译 & 打包依赖dll发布
十年前学C++的时候,无聊到把windows 文件夹下几乎所有的*.dll 都看过一遍.偶尔在程序运行时看到缺少 *.dll 的提示,都会直接找出来解决. 随着“开发平台”和“编译器”版本的逐年升级, ...
- Android 使用binder访问service的方式
binder机制是贯穿整个Android系统的进程间访问机制,经常被用来访问service,我们结合代码看一下binder在访问service的情形下是怎么具体使用的. service 你可以理解成没 ...
- vs 错误提示及解决方案
错误: 应输入";" 错误原因,宏展开出现错误:
- 验证redis的快照和AOF
http://blog.csdn.net/lichangzai/article/details/8692103 redis持久化简介: redis是一个支持持久化的内存数据库,也就是说redis需要经 ...
- ITFriend创业败局(二):初创公司应该怎样分配股权
说到金钱,中国人有句口头禅,"谈钱多伤感情".这句话非常能代表,在熟人之间,中国人不喜欢在金钱上"斤斤计较". 但是,对于一起出来创业,尤其是没有经验的年轻人来 ...
- uitableview顶部多出20距离, UIScollView顶部多出64距离
self.automaticallyAdjustsScrollViewInsets = NO;看 这个UIViewController的这个属性你就明白了,此属性默认为YES,这样UIViewCont ...
- 常用的iOS开发或者优化的小工具
下面介绍一下我常用的iOS开发或者优化的小工具 由于很多工具大多数博客都已经介绍过了,我就列举一些我认为还不错但是大家不常列举的: Crafter https://github.com/krzyszt ...
- 图片拉伸:IOS开发UIImage中stretchableImageWithLeftCapWidth
意思就是用来创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是左边不拉伸区域的宽度,第二个参数是上面不拉伸的高度.那么接下来的一个像素会被拉伸.例如,leftCapHeight为6,top ...