国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

截圖工具——涂鴉

2019-11-08 02:04:23
字體:
供稿:網(wǎng)友

具有橢圓、矩形、箭頭、畫筆、文字涂鴉功能的截圖工具,效果如圖: 這里寫圖片描述

思路: 用泛型集合存儲涂鴉的數(shù)據(jù),每一次涂鴉后都存儲進(jìn)去,最后在OnPaint中遍歷該集合,通過GDI繪出。

重點講涂鴉部分: 1、橢圓、矩形、箭頭,都只需確定起點和終點。 2、畫筆需要確定點集合。 3、文字涂鴉通過透明Richtextbox寫上內(nèi)容后區(qū)域截屏成一個bitmap。

實現(xiàn)方法: 涂鴉通過GDI畫圖實現(xiàn):

PRivate void DrawTools(Graphics g, DrawToolData data) { Point beginPoint = data.beginPoint; Point endPoint = data.endPoint; ColorToolChose(); Rectangle rect = GetToolRect(beginPoint, endPoint); Pen pen = new Pen(data.penColor, data.penWidth); g.SmoothingMode = SmoothingMode.AntiAlias; switch (data.Type) { case 1://橢圓 using (pen) { g.DrawEllipse(pen, rect); } break; case 2://矩形 using (pen) { g.DrawRectangle(pen, rect); } break; case 3://箭頭 using (pen) { pen.EndCap = LineCap.ArrowAnchor; pen.EndCap = LineCap.Custom; pen.CustomEndCap = new AdjustableArrowCap(4, 4, true); g.DrawLine(pen, beginPoint, endPoint); } break; case 4://畫筆 if (data.pointList.Count < 2) return; Point[] points = data.pointList.ToArray(); using (pen) { g.DrawLines(new Pen(data.penColor, data.penWidth), points); } break; case 5://文字 if (data.textBmp.Width < 2) return; g.DrawImage(data.textBmp, data.beginPoint); break; } }

寫一個類用來存儲涂鴉數(shù)據(jù),然后用“List<>” 把每一次涂鴉的數(shù)據(jù)存起來。

//存儲畫筆工具 所有線段的 點集合、畫筆顏色寬度的類 的集合private List<DrawToolData> drawData = new List<DrawToolData>(); /// <summary> /// 存儲畫圖信息 /// </summary>public class DrawToolData { public int Type { get; set; } = 0; /// <summary> /// 畫筆工具線段點集合 /// </summary> public List<Point> pointList { get; set; } = new List<Point>(); public Color penColor { get; set; } public int penWidth { get; set; } public Point beginPoint { get; set; } = Point.Empty; public Point endPoint { get; set; } = Point.Empty; public float textSize { get; set; } = 16; //存文字分割后的字符串?dāng)?shù)組 public string textInfo { get; set; } public Bitmap textBmp { get; set; } = new Bitmap(1, 1); }

每次畫完一個圖形后都調(diào)用存儲數(shù)據(jù)的方法,存儲到數(shù)據(jù)集合的末尾。

private void addDrawData() { if (drawData.Count == 0) drawData.Add(new DrawToolData()); drawData[drawData.Count - 1].Type = clickType; drawData[drawData.Count - 1].penColor = selectedColor; drawData[drawData.Count - 1].penWidth = penWidth; switch (clickType) { case 1: case 2: case 3: drawData[drawData.Count - 1].beginPoint = BeginPoint; drawData[drawData.Count - 1].endPoint = EndPoint; break; case 4: (drawData[drawData.Count - 1].pointList).Add(EndPoint); break; case 5: drawData[drawData.Count - 1].beginPoint = BeginPoint; drawData[drawData.Count - 1].textSize = colorWithText1.textSize; drawData[drawData.Count - 1].textInfo = drawTextTool1.Text; drawData[drawData.Count - 1].textBmp = GetTextBmp(); break; }

最后在OnPaint中遍歷數(shù)據(jù)畫出圖形。

foreach (DrawToolData data in drawData) { DrawTools(g, data); }

文字涂鴉:做一個透明的RichtextBox控件(百度一下),然后截屏CopyFromScreen,得到bitmap。

/// <summary> /// 得到文字涂鴉的圖片 /// </summary> private Bitmap GetTextBmp() { Bitmap bmp = new Bitmap(drawTextTool1.Width, drawTextTool1.Height); Graphics g = Graphics.FromImage(bmp); Point point = new Point(drawTextTool1.Location.X + this.Location.X + myLocation.X, drawTextTool1.Location.Y + this.Location.Y + myLocation.Y); g.CopyFromScreen(point, Point.Empty, drawTextTool1.Size); return bmp; }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 治县。| 京山县| 泰州市| 利川市| 虹口区| 灵丘县| 独山县| 通河县| 元朗区| 永吉县| 庆安县| 天长市| 绥滨县| 北宁市| 大港区| 北京市| 台南市| 德保县| 九龙坡区| 永修县| 海阳市| 海阳市| 航空| 长宁县| 新龙县| 班玛县| 灵宝市| 登封市| 弥勒县| 白银市| 东莞市| 平昌县| 电白县| 寿宁县| 上栗县| 曲水县| 双辽市| 濮阳市| 舒城县| 紫金县| 栾城县|