桌面应用程序——测距仪

苹果IOS 12推出的测距仪功能,在没有尺子的情况下,能够粗略的利用手机获得距离长度,获得用户的好评。请利用所学的桌面应用开发知识,仿照完成一个类似测距仪功能的小软件,功能要求如下所示,最终效果见Demo文件夹:

软件需求及编码提示:
该软件只需要一个窗体,该窗体名称为FrmDistanceMeasure, 该窗体标题为“测距仪”, 窗体大小为500*780。
首先利用Graphics对象的DrawImage( )方法,将所需测量距离的图片显示出来, 相关代码如下:测试上述编码之前,请确认yaoming.jpg文件已保存到项目所在的bin文件夹下。运行上述代码,成功后,你会看到窗体中显示了一张姚明的图片。

通过为该窗体添加相关事件,结合GDI+中的Graphics对象,实现测距以及距离展示功能。具体方法如下:
当用户鼠标按下的时候,以点击点位置为中心绘制一个填充颜色为白色,半径为10个像素的填充圆;并以点击点位置为中心绘制一个颜色为白色,虚线类型为划线,半径为20的轮廓圆。
当用户鼠标移动的时候,以点击点位置为中心绘制一个填充颜色为白色,半径为10个像素的填充圆;并以点击点位置为中心绘制一个颜色为白色,虚线类型为划线,半径为20的轮廓圆。并且在两个点之间绘制一条颜色为白色,宽度为3的直线。
定义两个Point对象,clickPoint, movePoint,用于分别记录鼠标点击下去的点的坐标,以及鼠标移动到的点的坐标。
定义一个double类型的distance变量,用于计算出真实的物理距离。利用两点之间的距离公式,可以计算出点击点与移动点的像素距离。上述像素距离*0.34, 就能换算出实际的物理长度,以cm为单位。具体公式如下所示:
distance=√((x_2-x_1 )^2+(y_2-y_1 )^2 )*0.34
得到上述距离信息后, 在Paint事件中, 利用Graphics对象的DrawString( )方法,将上述距离信息,显示在窗体的左上角,具体代码如下:(其中 “f0”,表示保留0位小数)

代码部分:

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 practice8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        bool isdown = false;
        Graphics g;
        Point cpt;
        Point mpt;
        double distance = 0;
        double i = 0;
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Pen p = new Pen(Color.White);
            p.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot;
            g = e.Graphics;
            Image img = Image.FromFile("yaoming.jpg");
            g.DrawImage(img, 0, 0);
            g.FillEllipse(Brushes.White, cpt.X - 5, cpt.Y - 5, 10, 10);
            g.DrawEllipse(p, cpt.X - 10, cpt.Y - 10, 20, 20);
            g.FillEllipse(Brushes.White, mpt.X - 5, mpt.Y - 5, 10, 10);
            g.DrawEllipse(p, mpt.X - 10, mpt.Y - 10, 20, 20);
            g.DrawLine(Pens.White,cpt,mpt);
            i=(cpt.X-mpt.X)*(cpt.X-mpt.X)+(cpt.Y-mpt.Y)*(cpt.Y-mpt.Y);
            distance = Math.Sqrt(i) * 0.34;
            g.DrawString(distance.ToString("f0") + "cm", this.Font, Brushes.White, 0, 0);
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            isdown = true;
            cpt.X = e.X;
            cpt.Y = e.Y;
            this.Invalidate();
        }

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            isdown = false;
            mpt.X = e.X;
            mpt.Y = e.Y;
            this.Invalidate();
        }

    }
}

运行结果:
在这里插入图片描述
只需要在bin文件中更改想要测的图片即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值