WPF特效-绘制实时2D激光雷达图

简介: 原文:WPF特效-绘制实时2D激光雷达图 接前两篇:https://blog.csdn.net/u013224722/article/details/80738619https://blog.csdn.net/u013224722/article/details/80738995除了c# GDI 、Opencv(c++)、 c# Emgu绘图外,其实c#  WPF绘图功能也很强大。
原文: 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

目录
相关文章
|
7月前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
373 0
|
C# 前端开发
[原]Wpf应用Path路径绘制圆弧
原文:[原]Wpf应用Path路径绘制圆弧 1. 移动指令:Move Command(M):M 起始点  或者:m 起始点比如:M 100,240或m 100,240使用大写M时,表示绝对值; 使用小写m时; 表示相对于前一点的值,如果前一点没有指定,则使用(0,0)。
3042 0
|
C#
WPF绘制简单常用的Path
原文:WPF绘制简单常用的Path 写代码出身的我们经常需要使用一些简单 但是不是规则图形的Path 但限于美工功底有限 不知道怎么去画 下面我告诉大家一些简单的小技巧 用代码来画Path 个人还是比较喜欢用代码 因为数值控制的更精细   MSDN告诉我们,Path可以用这些形状绘制: ArcSegment 类 表示两点之间的一条椭圆弧。
2231 0
|
C# 前端开发
[原译]WPF绘制圆角多边形
原文:[原译]WPF绘制圆角多边形 介绍 最近,我发现我需要个圆角多边形。而且是需要在运行时从用户界面来绘制。WPF有多边形。但是不支持圆角。我搜索了一下。也没找到可行的现成例子。于是就自己做吧。本文描述了圆角多边形的实现,也包括如何用在你的项目里。
1636 0
|
C#
WPF 4 TextBox 笔刷特效
原文:WPF 4 TextBox 笔刷特效      TextBox 控件是我们开发过程中必不可少的组件,它可以使应用程序方便的与用户进行文字交互。在新WPF 4 中又为TextBox 添加了两种新笔刷特效:Selection 、Caret ,通过这两种特效使得TextBox 更加美观。
646 0
|
C# Windows
WPF显示GIF图的几种方式
原文:WPF显示GIF图的几种方式 使用MediaElement   这种方式有一个局限就是图片路径必须是绝对路径   并且你还需要设置让他循环播放 private void MediaElement_MediaEnded(object sender, R...
3305 0
|
C#
WPF特效-实现3D足球效果
原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下:  每个面加载不同贴图。                                                          ...
930 0
|
算法 C# 容器
WPF特效-实现弧形旋转轮播图
原文:WPF特效-实现弧形旋转轮播图        项目遇到,琢磨并实现了循环算法,主要处理循环替换显示问题       (如:12张图组成一个圆弧,但总共有120张图需要呈现,如何在滑动中进行显示块的替换,并毫无卡顿)        处理的自己感觉比较满意,记录一下。
2175 0
|
C#
WPF特效-鱼游动动画2
原文:WPF特效-鱼游动动画2           纯代码撸动画实践2:           原图:(png格式)                                                添加Effect以及Effect动画处理后Gif效果:                                     处理: 眼部放大缩小动画; 嘴缩放动画; 尾部收缩动画;  颜色变化效果动画。
1079 0
|
C# 图形学
WPF特效-鱼游动动画
原文:WPF特效-鱼游动动画   实现思路:           通过VisualBrush Binding方式获取鱼局部图像,在Viewport3D中创建ModelVisual3D块并把获取到的局部图通过VisualBrush Binding方式赋值。
1001 0