C# 开发电子印章制作工具 -- 附下载程序
前言 本人在业余时间,开发了一款电子印章制作软件。印章制作软件看似简单,其实不然。
比如对椭圆形印章而言,要求公司名称中的每一个字间隔相等,要求字的方向与椭圆曲线垂直。
要满足这些条件,需要复杂的计算,并且要有一定的几何学基础。软件界面如下:
本文主要讲述椭圆形印章制作思路,对于圆形印章 ,软件开发难度并不大。
椭圆印章要满足以下两个条件:
1 公司名称字体间隔大小要一样。
2 字体方向与对应的椭圆曲线是相切的。
下面分析如何通过程序满足这两点要求。
1 计算椭圆的弧线长度
假设公司名称占了椭圆220度边长,如何计算出220度弧线的长度? 肯定有数学公式可以计算。我没有用公式计算。我联想到了“微积分”的概念。可以将这一段弧线切成几千份小的弧线,把小的弧线段长度加起来就是总的长度。小的弧线段长度非常小,可以用两点之间的直线长度代替。
假设将弧线分成n份,将这n个线段长度加起来就是弧线长度。
/// <summary>
/// 将弧线分成splitCount份,计算弧线上的点
/// </summary>
/// <param name="startDegree">弧线起始度数</param>
/// <param name="splitCount">分成多少份</param>
/// <returns></returns>
List<PointDouble> GetDrawPoint(double startDegree, int splitCount)
{
double a = EllipseWidth / 2;
double b = EllipseHeight / 2; List<PointDouble> result = new List<PointDouble>(); Graphics g = Graphics;
for (int i = 0; i < splitCount; i++)
{
double degree = startDegree + (i * CompanySpanDegree) / splitCount;
double k = Math.Tan(ToArc(degree));
//Debug.WriteLine(string.Format("degree:{0}", degree));
PointDouble ptDraw = new PointDouble();
if (degree < 90)
{
if (intersections[0].X < 0)
{
ptDraw = intersections[0];
}
else if (intersections[0].X > 0)
{
ptDraw = intersections[1];
}
else
{
}
}
else if (degree > 90)
{
if (intersections[0].X > 0)
{
ptDraw = intersections[0];
}
else if (intersections[0].X < 0)
{
ptDraw = intersections[1];
}
else
{
}
}
else
{
if (intersections[0].Y < 0)
{
ptDraw = intersections[0];
}
else
{
ptDraw = intersections[1];
}
} result.Add(ptDraw);
} return result;
}
2 确定每个文字的坐标。
弧线总长度计算处理后,就可以算出每个文字占用的弧线长度,根据每个文字占用的弧线长度就可以计算出文字的坐标。
List<PointDouble> CalDrawPoint(float startDegree, int txtCount)
{
List<double> listLenPart = new List<double>();
List<PointDouble> listPoint = GetDrawPoint(startDegree, 10000);
//计算弧线长度
double arcLen = ;
//每个文字占用的弧线长度
double txtSpanPer = arcLen / (txtCount - 1); //计算文字对应的点
List<PointDouble> result = new List<PointDouble>();
result.Add(listPoint[0]); double lenSpanCal = 0;
for (int i = 0; i < listLenPart.Count; i++)
{
double n = listLenPart[i];
lenSpanCal += n;
if (lenSpanCal >= txtSpanPer)
{
result.Add(listPoint[i + 1]);
lenSpanCal = 0;
}
} if (result.Count < txtCount)
result.Add(listPoint.Last()); Debug.Assert(result.Count == txtCount);
return result;
}
3 计算文字的旋转角度
确定了文字的坐标后,就可以计算出该点对应的切线,从而求出切线角度。切线公式如下:
计算切线坐标源码如下:
/// <summary>
/// 计算椭圆切线的角度
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
float CalTangentLineDegree(float x, float y)
{
if (y == 0)
return 90; float a = EllipseWidth / 2;
float b = EllipseHeight / 2;
float k = -b * b * x / (a * a * y);
float result = (float)Math.Atan(k);
result = (float)ToDegree(result);
return result;
}
文字的坐标和旋转角度确定后,后续处理就水到渠成:
程序界面截图:
搜索
复制
C# 开发电子印章制作工具 -- 附下载程序的更多相关文章
- .NET软件开发与常用工具清单
[工欲善其事,必先利其器]软件开发的第一步就是选择高效.智能的工具. 下面列出的工具软件能辅助提高工作效率. 开发类工具 微软.Net平台下的集成开发环境:Visual Studio. Visual ...
- 01-1制作U盘启动盘--大白菜超级U盘启动盘制作工具
使用大白菜超级U盘启动盘制作工具制作U盘启动盘 工具/材料: 电脑.U盘.浏览器.大白菜u盘启动制作工具. 操作方法: 打开浏览器,输入大白菜,点击普通下载进行大白菜u盘启动制作工具下载: 或者通过 ...
- 第3章 如何用DAP仿真器下载程序
第3章 如何用DAP仿真器下载程序 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- 第3章 如何用DAP仿真器下载程序—零死角玩转STM32-F429系列
第3章 如何用DAP仿真器下载程序 集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ...
- QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)
前两天入手了一块2.8’的tft液晶显示屏,于是和树莓派连了一发,成功将命令行显示在了这块小的可怜的屏幕上之后,觉得这屏幕就显示个黑白内容太浪费了,于是考虑开发一个”脸”(图形用户界面,GUI).首先 ...
- BAT等大厂已开源的70个实用工具盘点(附下载地址)
前面的一篇文章<微软.谷歌.亚马逊.Facebook等硅谷大厂91个开源软件盘点(附下载地址)>列举了国外8个互联网公司(包括微软.Google.亚马逊.IBM.Facebook.Twit ...
- Mac OS平台下应用程序安装包制作工具Packages的使用介绍
一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...
- C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!!
原文:C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!! 一般我们在开发Winodws Phone APP 的时候往 ...
- Visual Studio 2012 开发环境配置+控制台工具+桌面应用程序
一.界面布局视图设置 1.窗口的布局.控制台窗口运行恢复到开发环境的设置方法 也可以保存好设好的个性化设置,导入设置: 2.视图|服务器资源管理器(sever explorer) 可以访问数据源.服务 ...
- 微信小程序-工具的下载与安装
QQ讨论群:785071190 安装开发工具 前往 开发者工具下载页面 ,根据自己的操作系统下载对应的安装包进行安装,有关开发者工具更详细的介绍可以查看 <开发者工具介绍> .工具安装非常 ...
随机推荐
- 指针进阶(C语言终)
1. sizeof和strlen的对比 1.1 sizeof 在学习操作符的时候,我们学习了sizeof , sizeof 计算变量所占内存内存空间大小的,单位是 字节,如果操作数是类型的话,计算的是 ...
- 字符串、列表、元组、字典(python)
文章目录 1.python字符串 1.1 python访问字符串中的值 1.2Python 字符串连接 1.3Python字符串运算符 2.python列表 2.1访问列表中的值 2.2更新列表 2. ...
- SQL Server 安装图解
此安装步骤适用于首次安装 一.SQL Server 安装 1.双击SQL Server 光盘映像文件,会出现如图所示界面 选择如下图所示的选项 2.输入产品密钥(这里演示密钥进行) 3.配置更新项,检 ...
- ESP32+L298N+MQTT+4G无线远程监控+四驱动小破车
ESP32+L298N+MQTT+4G无线远程监控+四驱动小破车 小车源代码 注意修改WIFI 信息 #include <analogWrite.h> #include <WiFi. ...
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
问题复现 项目上历史项目为解决漏洞扫描从Tomcat 6.0升级到了9.0版本,服务启动的日志显示如下警告,数据源是通过JNDI方式在server.xml中配置的,控制台上狂刷无法找到表空间的错误(没 ...
- docker login 私有仓库时报错
连接私有harbor报错如下: docker login 192.168.1.88 -uadmin -pHarbor12345 WARNING! Using --password via the CL ...
- Ext.Net & ASP.NET
实际上己有很完善的asp.net.控件实现ExtJS的功能,使用开发人员不用过多了解EXtJS即可实现其一样的功能. 使用Asp.net web form /MVC方式均可.可以很快的上手开发,如果用 ...
- confd+Nacos实现nginx配置文件管理
场景: 由于公司内部站点保护的需求, 将部分的站点添加白名单, 这边的操作是在nginx配置文件中添加如下代码 allow 127.0.0.1: deny all; 但随之问题也出现了, 需要添加一个 ...
- 服务器间文件实时双向同步(rsync+inotify)
场景: 主从服务器项目文件实时双向同步(参考:http://www.xcx1024.com/ArtInfo/3026389.html) 一.rsync安装 yum在线: yum install -y ...
- 阿里巴巴LangEngine开源了!支撑亿级网关规模的高可用Java原生AI应用开发框架
LangEngine作为阿里集团内部发起的纯Java版本的AI应用开发框架,经过充分实践,已经广泛应用于包括淘宝.天猫.阿里云.爱橙科技.菜鸟.蚂蚁.飞猪.1688.LAZADA等在内的多个业务场景. ...