一个web图片热点生成工具(winform开发) 附源码
给图片加热点是web开发中经常用到的一个功能。这方面的工具也不少。
为了更好的满足自己的需求,写了一个winform程序。
可以方便的给图片加热点,更方便灵活!
源码下载 http://download.csdn.net/download/qq_29939347/10150681
生成的代码:
1 <img src = "D:\12.jpg" usemap = "#Map_2017-12-08-10-49-17" > 2 <map name="Map_2017-12-08-10-49-17" > 3 <area shape="polygon" coords="144,229,228,198,266,152,305,181,319,247,405,288,396,324,353,348,340,381,307,391,278,395,280,422,291,427,279,444,284,453,264,461,225,444,187,452,133,465,102,454,90,459,55,459,50,432,17,412,15,395,0,373,11,372,13,310,45,320,83,311,122,301,136,278" href = "http://www.sina.com.cn/" > 4 <area shape="polygon" coords="784,426,768,475,787,491,815,491,833,475,854,452,863,435,881,418,903,396,867,390,855,408,842,416,830,401" href = "https://www.cnblogs.com/" > 5 <area shape="polygon" coords="39,474,322,474,322,663,39,663" href = "" > 6 <area shape="polygon" coords="427,322,567,341,623,322,673,295,681,275,672,257,698,248,746,227,803,173,770,154,721,165,732,126,766,99,768,48,759,22,779,12,786,39,806,49,824,55,844,50,855,87,857,99,821,154,842,181,831,198,889,260,845,301,817,321,740,318,722,348,676,389,655,413,640,433,591,422,589,472,543,432,550,400,505,417,467,382,435,370" href = "" > 7 </map>
技术要点
1 画图
热点图形有 矩形,多边形,圆形等。为了统一处理,定义了接口:
1 interface IDrwaShap 2 { 3 void Draw(System.Drawing.Graphics g); 4 string GetLink(); 5 bool Hit(int x, int y); 6 bool IsChecked(); 7 void SetChecked(bool sel); 8 void SetEndPoint(System.Drawing.Point end); 9 void SetLink(string link); 10 11 void AddPoint(int x,int y); 12 13 void SetStartMovePoint(int x, int y); 14 void SetCurMovePoint(int x, int y); 15 16 int GetShapId(); 17 18 List<Point> GetPoint(); 19 20 }
矩形实现类为HotShapRect,多边形为HotShapPoly。
1 class HotShapPoly : PicHot.IDrwaShap 2 { 3 static Pen _drawPen = new Pen(Color.Red, 2); 4 static Pen _checkedPen = new Pen(Color.Blue, 2); 5 6 public int _shapId = 0; 7 private bool _checked = false; 8 private bool _startMove = false; 9 10 private Point _moveStartPoint = new Point(0, 0); 11 string _linkText = string.Empty; 12 13 List<Point> _listPoint = new List<Point>(); 14 public HotShapPoly() 15 { 16 _shapId = AppNum.GetId(); 17 } 18 public int GetShapId() 19 { 20 return _shapId; 21 } 22 23 public List<Point> GetPoint() 24 { 25 return _listPoint; 26 } 27 public void AddPoint(int x, int y) 28 { 29 Point newPt = new Point(x,y); 30 foreach (Point p in _listPoint) 31 { 32 if (p == newPt) 33 return; 34 } 35 36 _listPoint.Add(new Point(x, y)); 37 } 38 39 public void SetLink(string link) 40 { 41 _linkText = link; 42 } 43 public string GetLink() 44 { 45 return _linkText; 46 } 47 public void SetEndPoint(Point end) 48 { 49 AddPoint(end.X, end.Y); 50 } 51 52 public void SetChecked(bool sel) 53 { 54 _checked = sel; 55 _startMove = _checked; 56 } 57 58 public bool IsChecked() 59 { 60 return _checked; 61 } 62 63 public void SetStartMovePoint(int x, int y) 64 { 65 _moveStartPoint = new Point(x, y); 66 } 67 public void SetCurMovePoint(int x, int y) 68 { 69 if (!_startMove) 70 return; 71 72 Point moveEndPoint = new Point(x, y); 73 List<Point> _listPointNew = new List<Point>(); 74 foreach (Point p in _listPoint) 75 { 76 int m = p.X + (moveEndPoint.X - _moveStartPoint.X); 77 int n = p.Y + (moveEndPoint.Y - _moveStartPoint.Y); 78 _listPointNew.Add(new Point(m,n)); 79 } 80 _listPoint = _listPointNew; 81 82 _moveStartPoint = moveEndPoint; 83 } 84 85 86 public bool Hit(int x, int y) 87 { 88 if (_listPoint.Count <= 2) 89 return false; 90 91 Point hitPt = new Point(x,y); 92 93 GraphicsPath myGraphicsPath = new GraphicsPath(); 94 Region myRegion = new Region(); 95 myGraphicsPath.Reset(); 96 97 Point[] points = _listPoint.ToArray(); 98 myGraphicsPath.AddPolygon(points);//points); 99 myRegion.MakeEmpty(); 100 myRegion.Union(myGraphicsPath); 101 //返回判断点是否在多边形里 102 bool myPoint = myRegion.IsVisible(hitPt); 103 104 return myPoint; 105 } 106 107 public void Draw(Graphics g) 108 { 109 if (_listPoint.Count <= 2) 110 return ; 111 112 Pen pen = _checked ? _checkedPen : _drawPen; 113 114 g.DrawPolygon(pen, _listPoint.ToArray()); 115 } 116 117 internal bool IsValidate() 118 { 119 if (_listPoint.Count <= 2) 120 return false; 121 return true; 122 } 123 124 }
2 生成代码
1 private void buttonCreateHtml_Click(object sender, EventArgs e) 2 { 3 StringBuilder sb = new StringBuilder(); 4 5 string mapName = string.Format("Map_{0}", DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")); 6 sb.AppendFormat("<img src = \"{0}\" usemap = \"#{1}\" >\r\n", fileName, mapName); 7 sb.AppendFormat("<map name=\"{0}\" >\r\n", mapName); 8 foreach (IDrwaShap shap in _shapGroup.Values) 9 { 10 sb.AppendFormat("<area shape=\"polygon\" coords=\"{0}\" href = \"{1}\" >\r\n", 11 LinkPointToStr(shap.GetPoint()), shap.GetLink()); 12 } 13 sb.Append("</map>"); 14 Clipboard.SetText(sb.ToString()); 15 textBoxHtml.Text = sb.ToString(); 16 17 MessageBox.Show(this, "代码已复制到剪贴板!"); 18 }
技术交流联系qq 13712486
转载于:https://www.cnblogs.com/yuanchenhui/p/web_hot_pic.html
一个web图片热点生成工具(winform开发) 附源码相关推荐
- 万圣节头像框生成工具微信小程序源码
大家好万圣节马上就要来了 那么临近了万圣节那么也给大家带来了一款与万圣节相关的程序 那么这款程序呢就是可以制作生成与万圣节相关的头像框 内含多种模板风格可供选择 另外该款小程序是无需服务器和域名的 搭 ...
- 万圣节头像框生成工具微信小程序源码下载支持流量主收益模式
大家好万圣节马上就要来了 那么临近了万圣节那么也给大家带来了一款与万圣节相关的程序 那么这款程序呢就是可以制作生成与万圣节相关的头像框 内含多种模板风格可供选择 支持用户上传模式和自动获取微信头像模式 ...
- 二维码生成工具微信小程序源码下载
二维码生成工具 支持上传二维码logo和调整尺寸背景颜色等等 无需域名与服务器 使用教程,用HBuilder X软件打卡项目然后运行到微信小程序即可 下方是演示图: 小程序源码下载地址: (已更新)二 ...
- Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)
<自动化>工具 1.QTP QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试. 2. Selenium(文章重点讲) Selenium是一个开源的web自动化测试工具,免 ...
- java计算机毕业设计web高校车辆调度系统设计与实现(附源码、数据库)
java计算机毕业设计web高校车辆调度系统设计与实现(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...
- java计算机毕业设计web唐院寻人表白系统(附源码、数据库)
java计算机毕业设计web唐院寻人表白系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...
- java计算机毕业设计ssm基于web的教学资源管理系统01jkz(附源码、数据库)
java计算机毕业设计ssm基于web的教学资源管理系统01jkz(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstor ...
- Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码
Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...
- 安卓登录注册界面开发(附源码)
源码下载和博客访问:安卓登录注册界面开发(附源码) 前言 最近找安卓登录注册界面,找了好久也没找到比较满意的设计,最后想想其实登录和注册两个界面也不复杂,干脆花点时间自己弄. 界面预览 最后的效果如下 ...
最新文章
- 华为MateRS巴黎大皇宫首秀 专为保时捷跑车70周年高定手机
- 远程访问mysql数据库_关于远程连接MySQL数据库的问题解决
- mongoose查询不到数据表中的数据的问题
- “羊贵妃”没走“牛魔王”又来?牛肉价格屡创新高
- springboot util 测试类怎么写_SpringBoot入门建站全系列(九)文件上传功能与下载方式...
- python可视化水平双向箭头_python数据可视化第二弹
- java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?
- python flask服务器假死_python – Flask POST请求导致服务器崩溃
- android 生成签名和SHA1签名信息
- Android加密算法之AES加密和解密实现
- 19.Linux/Unix 系统编程手册(上) -- 监控文件事件
- Tomcat------如何配置域名和80端口
- 2021年中国液晶显示行业产业链分析:关键零部件国产化推进液晶显示行业发展 [图]
- 【已解决】【V2版本】如何使用脚本关闭Win10自动更新服务并阻止其自动启动?
- 六一儿童节(python)
- Win7 定时关机,重启命令
- 百度AI—人脸在线比对
- 一种Android应用耗电定位方案
- Python库中,如何使用jieba模块来实现古典名著《西游记》的分词
- Base64 编码原理及代码实现
热门文章
- 代码安全_弱点(脆弱性)分析 CWE_20200807
- Linux 更改主机的 host 名
- Linux 的 ps 命令 查看系统进程
- 【Kettle】Kitchen和Pan的命令行参数
- 【IDEA】关于 IDEA 中新建 web 项目的 webapp 文件夹没有小蓝点 ,启动服务,访问不到解决方案
- eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法
- Sonar问题及解决方案汇总
- 一个很小的图标需要另一个HTTP请求是不是很愚蠢? 如何将收藏夹图标放到精灵中?
- Jupyter Notebook中未显示Conda环境
- Bootstrap模态出现在背景下