<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
windows系統中的畫板工具,有好幾種畫刷,C#中並沒有直接對應可使用的類,只能自己研究。
根據本人對PS的相關功能細心分析,發現各種畫刷其實就是一幅圖片的移位重疊顯示。通常這幅畫刷圖是半透明的,只有其中一些區域有顏色。
上圖中的畫刷,把間隔設大之後可以明顯看到原圖的模樣。
這是基於位移的畫刷,另外有基於時間的,比如噴槍工具。
1). 直線演演算法
為什麼要直線演演算法?因為我們移動滑鼠,觸發MouseMove事件,記錄滑鼠前一座標點與當前點,如果兩點是是相鄰的,當然不需要再做多餘的演演算法,當如果兩點是不相鄰的,我們就需要計算兩點之間所有的點。否則無法有效地進行固定間隔繪製畫刷圖。
/// <summary> /// 順序獲取兩點間直線上的所有點 /// </summary> /// <param name="pStart">開始點</param> /// <param name="pEnd">結束點</param> /// <returns>兩點間直線上的所有點</returns> private List<Point> getPoint2Point(Point pStart, Point pEnd) { List<Point> linePoint = new List<Point>(); if (pStart.X == pEnd.X && pStart.Y == pEnd.Y) { linePoint.Add(pStart); return linePoint; } DDALine(pStart.X, pStart.Y, pEnd.X, pEnd.Y, ref linePoint); return linePoint; } //DDA直線畫法 private void DDALine(int x0, int y0, int x1, int y1, ref List<Point> ptl) { int dx,dy,eps1,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(Math.Abs(dx)>Math.Abs(dy)) eps1=Math.Abs(dx); else eps1=Math.Abs(dy); xIncre=(float)dx/(float)eps1; yIncre=(float)dy/(float)eps1; for(k=0;k<=eps1;k++) { ptl.Add( new Point((int)(x + 0.5), (int)(y + 0.5)) ); x+=xIncre; y+=yIncre; } }
2).滑鼠事件
分別為滑鼠按下、移動、放開事件
bool bIsDraw = false; //主圖畫線 Point startPoint_Draw = new Point();//劃線點變數 List<Point> pts = new List<Point>();//畫點儲存
private void pictureBox_main_MouseMove(object sender, MouseEventArgs e) { PictureBox pb = sender as PictureBox; ssl_point.Text = e.Location.ToString(); pb.Refresh(); if (bIsDraw) { Point p = limitPoint(e.Location, pictureBox_main.ClientSize); if (p == startPoint_Draw) return; Graphics gs = Graphics.FromImage(pb.Image); if (pictureBox_main.Image != null ) { List<Point> pl = getPoint2Point(startPoint_Draw, p); pl.RemoveAt(0); pts.AddRange(pl); if (pts.Count >= peninv) { for (int i = penmod; i < pts.Count; i += peninv) { gs.DrawImage(blushbmp_curr, pts[i].X - pensize , pts[i].Y - pensize , pensize*2, pensize*2); } penmod = pts.Count % peninv; pts.RemoveRange(0, pts.Count - penmod); } } gs.Dispose(); startPoint_Draw = p; } } private void pictureBox_main_MouseDown(object sender, MouseEventArgs e) { if(e.Button == System.Windows.Forms.MouseButtons.Left) if (bIsDraw == false) { startPoint_Draw = e.Location; pts.Clear(); pts.Add(startPoint_Draw); bIsDraw = true; } } private void pictureBox_main_MouseUp(object sender, MouseEventArgs e) { if (bIsDraw == true) { bIsDraw = false; if (pictureBox_main.Image != null ) { pts.Clear(); } pictureBox_main.Refresh(); } }
如果根據位移方向加上圖片的角度旋轉效果,應該會更加接近PS的效果。
我使用的畫刷圖就是來源於本文上圖的PS畫刷。
圖中5條畫刷線分別使用間隔1,10,20,40,80。使用不同的原圖,就能得到各種各樣的畫刷。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45