苹果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文件中更改想要测的图片即可

桌面应用程序——测距仪相关推荐

  1. 桌面应用程序 azure_如何开始使用Microsoft Azure-功能应用程序,HTTP触发器和事件队列...

    桌面应用程序 azure "Serverless" architecture is all the rage in tech land at the moment, includi ...

  2. 桌面应用程序 azure_Azure Logic应用程序用例–黑色星期五

    桌面应用程序 azure This blog gives an overview of how Azure Serverless technologies came to rescue when th ...

  3. window下使用nw.js开发桌面应用程序环境的搭建

    安装node window下去node官网下载长期支持版本或者最新稳定版都可以. 按装nw用来管理和按装nw.js npm install -g nrm # 用来设置npm镜像地址 npm insta ...

  4. 【教程】TestComplete测试桌面应用程序教程(四)

    TestComplete是一款具有人工智能的自动UI测试工具,利用自动化测试工具和人工智能支持的混合对象识别引擎,轻松检测和测试每个桌面,Web和移动应用程序.其中,TestComplete支持测试使 ...

  5. python开发桌面软件-python适合windows的桌面应用程序开发吗?

    谢... 谢特!... (自己跑过来的). 曾经从事过几个桌面应用程序的开发, 来提供些建议 Qt 的 signal-slot 的机制做得很不错, 充分理解以后开发起来很顺手. 早期项目里, 举个栗子 ...

  6. java 网站转app_java – 将现有Web应用程序转换为桌面应用程序

    我在这里看到了关于这个主题的一些其他类似问题,但是他们没有太大帮助所以我提出了这个问题. 将合理大小的简单Web应用程序转换为基于Java桌面的PC和Mac客户端的最快方法是什么?不幸的是,由于各种原 ...

  7. 用于构建集成式桌面应用程序的新指南和新工具(转载于MSDN)

    发布日期: 2006-10-30 | 更新日期: 2006-10-30 Christian Thilmany 和 Jim Keane 本文将介绍以下内容: • CAB 和 Smart Client S ...

  8. 桌面应用程序员简单尝试Rich JavaScript Application

    虽然10年前搞过一段时间的Web应用开发,且为所在企业设计了一个基于ASP.NET WebForms(在.NET 1.1的基础上)的Web应用开发框架.但是,后来一直做的都是桌面类的应用,比如Smar ...

  9. AJAX是否能够取代桌面应用程序

    AJAX是否能够取代桌面应用程序 朱先忠编译 一. 引言 在AJAX是否能够取代桌面应用程序的问题上,存在很多争论.如今,这两种阵营正在逐步形成.在本文中,我的看法是:AJAX不可能取代桌面应用程序: ...

最新文章

  1. 李雷和韩梅梅的一次转账事务–事务系统概述
  2. ubuntu11.10 mysql_Ubuntu11.10下mysql+apache+PHP
  3. 官网上下载tomcat的linux版本
  4. 测试龙芯 LoongArch .NET之 使用 FastTunnel 做内网穿透远程计算机
  5. Java升级jdk_JDK版本升级
  6. 详述白盒测试的逻辑覆盖法的条件组合覆盖及其优缺点
  7. eNews 第二十七期/2007.08
  8. 如何看待快码编程这一款中文多平台编程工具
  9. 《华尔街》观后笔记7——阳光交易
  10. 必应词典软件案例分析
  11. Qt蓝牙:QBluetoothDeviceInfo、QBluetoothAddress
  12. Vue3通过npm或者yarn启动后,显示“Network: use --host to expose”,无法访问
  13. 解决memoryerror
  14. 关于matlab中矩阵的运算
  15. 第07篇 部署区块链浏览器(2)
  16. 什么是jsf_JSF的完整形式是什么?
  17. 几种限流、控频策略对比
  18. [附源码]SSM计算机毕业设计网上零食商城JAVA
  19. 2021年全球椎体成形术和椎体后凸成形术收入大约1269.7百万美元,预计2028年达到2222.5百万美元
  20. Android 怎么获取手机端的ip地址

热门文章

  1. 无聊的活动/缘生意转(2018 Nova OJ新年欢乐赛B题)解题报告
  2. [CS131] Lecture 1 Course Introduction课程介绍
  3. GNU Radio中的消息传递机制(Message Passing)
  4. 无法定位程序输入点 except_S120变频器的基本定位功能详解
  5. SCM:软件配置管理
  6. 声卡内录——概念简记
  7. 如何利用qq提取图片上的文字
  8. 福昕选择工具快捷键切换
  9. 基于matlab双反馈风力发电机系统Simulink仿真设计
  10. 申报互联网地图服务专业资质甲级跟乙级,需配合提供材料如下。