一个web图片热点生成工具(winform开发) 附源码
2021-04-22 23:26
标签:ali web epo web开发 rds eset gets log for 给图片加热点是web开发中经常用到的一个功能。这方面的工具也不少。 为了更好的满足自己的需求,写了一个winform程序。 可以方便的给图片加热点,更方便灵活! 源码下载 http://download.csdn.net/download/qq_29939347/10150681 生成的代码: 热点图形有 矩形,多边形,圆形等。为了统一处理,定义了接口: 矩形实现类为HotShapRect,多边形为HotShapPoly。 一个web图片热点生成工具(winform开发) 附源码 标签:ali web epo web开发 rds eset gets log for 原文地址:http://www.cnblogs.com/yuanchenhui/p/web_hot_pic.html1 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 ListPoint> GetPoint();
19
20 }
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 ListPoint> _listPoint = new ListPoint>();
14 public HotShapPoly()
15 {
16 _shapId = AppNum.GetId();
17 }
18 public int GetShapId()
19 {
20 return _shapId;
21 }
22
23 public ListPoint> 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 ListPoint> _listPointNew = new ListPoint>();
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
文章标题:一个web图片热点生成工具(winform开发) 附源码
文章链接:http://soscw.com/index.php/essay/78285.html