如何使用 C# 窗体应用程序使雷达设计看起来更有创意?

How can I make the radar design look more creative with C# form application?

我想用C#模拟一个雷达。我设法模拟了,但如何才能使外观更令人印象深刻?如果你能帮上忙,我会很高兴。

The image I want to improve

您可以在下面查看我试过的那段代码。我在设计时不能走得太远。这就是我想要的 help.I 我正在尝试制作一个更有用的界面。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Radar
{
public partial class Form1 : Form
{
    Timer t = new Timer();

    int WIDTH = 300, HEIGHT = 300, HAND = 150;
    int u;
    int cx, cy;
    int x, y;
    int tx, ty, lim = 20;

    Bitmap bmp;
    Pen p;
    Graphics g;


    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        bmp = new Bitmap(WIDTH + 1, HEIGHT + 1);
        this.BackColor = Color.Black;
        cx = WIDTH / 2;
        cy = HEIGHT / 2;
        u = 0;
        t.Interval = 5;
        t.Tick += new EventHandler(this.t_Tick);
        t.Start();

    }

    private void t_Tick(object sender, EventArgs e)
    {
        p = new Pen(Color.Green, 1f);
        g = Graphics.FromImage(bmp);
        int tu = (u - lim) % 360;

        if (u>= 0 && u <= 180)
        {
            x = cx + (int)(HAND * Math.Sin(Math.PI * u / 180));
            y = cy - (int)(HAND * Math.Cos(Math.PI * u / 180));

        }
        else
        {
            x = cx - (int)(HAND * -Math.Sin(Math.PI * u / 180));
            y = cy - (int)(HAND * Math.Cos(Math.PI * u / 180));
        }

        if (tu >= 0 && tu <= 180)
        {
            tx = cx + (int)(HAND * Math.Sin(Math.PI * tu / 180));
            ty = cy - (int)(HAND * Math.Cos(Math.PI * tu / 180));

        }
        else
        {
            tx = cx - (int)(HAND * -Math.Sin(Math.PI * tu / 180));
            ty = cy - (int)(HAND * Math.Cos(Math.PI * tu / 180));
        }

        g.DrawEllipse(p, 0, 0, WIDTH, HEIGHT);
        g.DrawEllipse(p, 80, 80, WIDTH - 160, HEIGHT - 160);

        g.DrawLine(p, new Point(cx, 0), new Point(cx, HEIGHT));
        g.DrawLine(p, new Point(0, cy), new Point(WIDTH, cy));

        g.DrawLine(new Pen(Color.Black, 1f), new Point(cx, cy), new Point(tx, 
        ty));
        g.DrawLine(p, new Point(cx, cy), new Point(x, y));

        pictureBox1.Image = bmp;
        p.Dispose();
        g.Dispose();

        u++;
        if (u == 360)
        {
            u = 0;
        }
    }

}

}

如果您想复制旧模拟雷达的外观,需要考虑一些效果:

模糊

模拟示波器从来都不锋利。因此可能需要一些模糊处理。获得此效果的一种方法是使用抗锯齿和放大图像。另一种方法是使用 WPF 并使用 blur effect

坚持

旧示波器使用非常慢的荧光粉,因此雷达 return 会持续一段时间,但强度会随着 return 的老化而降低。一种方法是创建一个遮罩,其中不透明度与图像中心周围的角度成正比。使用合适的混合模式在图像上绘制此蒙版,以降低旧雷达的强度 returns,并每帧旋转图像。

噪音

模拟雷达将显示各种雷达return。鸟类、雨滴、树木,任何在雷达视野范围内并产生 return 的东西。这会导致图像中出现噪点。一个简单的方法是创建一个较小的图像,每个像素填充随机数据。然后使用合适的混合模式和不透明度将其绘制在图像之上。

这些效果只用 winform 很难做到。您可能需要手动进行相当多的图像处理。或者可能使用 WPF,因为这允许更多种类的效果。