亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > HTML > 正文

canvas學(xué)習(xí)總結(jié)三之繪制路徑-線段

2024-08-26 00:21:19
字體:
供稿:網(wǎng)友

Canvas繪圖環(huán)境中有些屬于立即繪制圖形方法,有些繪圖方法是基于路徑的。

立即繪制圖形方法僅有兩個(gè)strokeRect(),fillRect(),雖然strokezText(),fillText()方法也是立即繪制的,但是文本不算是圖形。

基于路徑的繪制系統(tǒng)

大多數(shù)繪制系統(tǒng),如:SVG(Scalable Verctor Graphics, 可縮放的矢量圖形),Adobe Illustrator等,都是基于路徑的,

使用這些繪制系統(tǒng)時(shí),你需要先定義一個(gè)路徑,然后再對(duì)其進(jìn)行描邊或填充,也可以描邊加填充這樣圖形才能顯示出來。

Canvas中的三種繪制方式:

canvas,繪制路徑,線段

繪制一條線段

Canvas繪圖環(huán)境中,線段也是基于路徑繪制的,稱為線性路徑,創(chuàng)建線性路徑的方法:moveTO()與lineTo(),在創(chuàng)建路徑之后調(diào)用stroke()方法,才能在Canvas中畫出線段出來。

這就是前面我們所說的基于路徑的繪制方法,必須對(duì)其進(jìn)行描邊或者填充;

通常兩點(diǎn)連一線因此繪制線段非常簡(jiǎn)單,通過moveTO()指定線的起點(diǎn),通過lineTo()移動(dòng)到另一個(gè)點(diǎn)。

function drawLine(){    cxt.moveTo(50, 50);    cxt.lineTo(100, 100);}

然而這樣我們?cè)诋嫴贾惺强床灰娋€段的,前面我們說到基于路徑的繪制方法,必須要描邊或者填充。所以要想看到結(jié)果,我們必須還要使用stroke()方法。

因此我們把方法修改成下面這樣就會(huì)繪制出一條線段

function drawLine(){    cxt.moveTo(50, 50);    cxt.lineTo(200, 200);    cxt.stroke();}

canvas,繪制路徑,線段

我們只使用lineTo()也是能在畫布中繪制出線段的,我們把上面的代碼改成如下面所示,效果也是一樣的

function drawLine(){    cxt.lineTo(50, 50);    cxt.lineTo(200, 200);    cxt.stroke();}

總結(jié)下moveTo()與lineTo()的用法

  • moveTo(x,y): 將筆觸移動(dòng)到指定的坐標(biāo)x以及y上,向當(dāng)前路徑中增加一條子路徑,該方法不會(huì)清除當(dāng)前路徑中的任何子路徑。
  • lineTo(x,y): 繪制一條從當(dāng)前位置到指定x以及y位置的直線,如果當(dāng)前路徑中沒有子路徑,那么這個(gè)方法的行為與moveTo()一樣。如果當(dāng)前路徑中存在子路徑,此方法會(huì)將你所指定的這個(gè)點(diǎn)加入子路徑中。

改變線段的樣式

改變線段的寬度

function= 14;    cxt.lineTo(50, 50);    cxt.lineTo(200, 200);    cxt.stroke();}

canvas,繪制路徑,線段

改變線段的顏色

function drawLine(){    cxt.lineWidth = 14;    cxt.strokeStyle = 'green';    cxt.lineTo(50, 50);    cxt.lineTo(200, 200);    cxt.stroke();}

canvas,繪制路徑,線段

我們還可以利用CanvasGradient對(duì)象或者CanvasPattern對(duì)象給線段添加漸變色或圖案

function drawLine(){    cxt.lineWidth = 14;    var gradient = cxt.createLinearGradient(0, 0, canvas.width/2, canvas.height/2);    gradient.addColorStop(0, 'blue');    gradient.addColorStop(0.5, 'purple');    gradient.addColorStop(1, 'yellow');    cxt.strokeStyle = gradient;    cxt.lineTo(50, 50);    cxt.lineTo(200, 200);    cxt.stroke();}

canvas,繪制路徑,線段

 beginPath()與closePath()

從上面canvas中的三種繪制方式中我們可以看出,第二行的弧形路徑是開放路徑,最后一行的弧形是封閉路徑。那么封閉的路徑是怎么實(shí)現(xiàn)的呢?

下面我們來看看canvas中路徑繪制中兩個(gè)比較重要的方法

  • beginPath(): 清除當(dāng)前所有子路徑,以此來重置當(dāng)前路徑,重新規(guī)劃一條路徑。
  • closePath(): 用于封閉某段開放路徑。不是必需的,如果圖形是已經(jīng)閉合了的,即當(dāng)前點(diǎn)為開始點(diǎn),該函數(shù)什么也不做。

先繪制出一條折線

function drawLine(){    cxt.strokeStyle = 'green';    cxt.lineWidth = 2;    cxt.moveTo(50, 50);    cxt.lineTo(50, 150);    cxt.lineTo(150, 150);    cxt.stroke();}

canvas,繪制路徑,線段

修改上面例子中的代碼在代碼中添加beginPath()與closePath()方法

function drawLine(){    //描邊三角形    cxt.strokeStyle = 'green';    cxt.lineWidth = 2;    cxt.beginPath();    cxt.moveTo(50, 50);    cxt.lineTo(50, 150);    cxt.stroke();    cxt.beginPath();    cxt.lineTo(150, 150);    cxt.lineTo(150, 250);    cxt.stroke();  cxt.closePath();}

canvas,繪制路徑,線段

可以看出我們?cè)诋嫴贾欣L制了兩條路徑

注意:調(diào)用beginPath()之后,或者canvas剛建的時(shí)候,第一條路徑構(gòu)造命令通常被視為是moveTo()。所以我們?cè)诶L制圖形的時(shí)候一定要先使用beginPath()。

我們繼續(xù)修改我們的代碼

function drawLine(){    //描邊三角形    cxt.strokeStyle = 'green';    cxt.lineWidth = 2;    cxt.beginPath();    cxt.moveTo(50, 50);    cxt.lineTo(50, 150);    cxt.lineTo(150, 150);    cxt.closePath();    cxt.stroke();    //折線    cxt.translate(150, 0);    cxt.strokeStyle = 'red';    cxt.lineWidth = 2;    cxt.beginPath();    cxt.moveTo(50, 50);    cxt.lineTo(50, 150);    cxt.lineTo(150, 150);    cxt.stroke();    cxt.closePath();    //綠色填充三角形    cxt.translate(150, 0);    cxt.fillStyle = 'green';    cxt.lineWidth = 2;    cxt.beginPath();    cxt.moveTo(50, 50);    cxt.lineTo(50, 150);    cxt.lineTo(150, 150);    cxt.fill();    cxt.closePath();    //紅色填充三角形    cxt.translate(150, 0);    cxt.fillStyle = 'red';    cxt.lineWidth = 2;    cxt.beginPath();    cxt.moveTo(50, 50);    cxt.lineTo(50, 150);    cxt.lineTo(150, 150);    cxt.closePath();    cxt.fill();}

canvas,繪制路徑,線段

從上面的例子我們可以看出closePath()的位置不同,也會(huì)影響我們的圖形

注意:當(dāng)你調(diào)用fill()函數(shù)時(shí),所有沒有閉合的形狀都會(huì)自動(dòng)閉合,所以此時(shí)closePath()函數(shù)不是必須的。

但是調(diào)用stroke():如果你在stroke()方法之前只用closePath()會(huì)形成閉合路徑,如果在stroke()方法之后調(diào)用closePath()方法,此時(shí)圖形已經(jīng)繪制完成,當(dāng)前的繪制路徑已經(jīng)關(guān)閉,所以closePath()方法不起作用。

線段與像素邊界

先來看一個(gè)例子

function drawLine(){    //描邊三角形    cxt.lineWidth = 1;    cxt.beginPath();    cxt.moveTo(50, 50);    cxt.lineTo(450, 50);    cxt.stroke();    cxt.beginPath();    cxt.moveTo(50.5, 150.5);    cxt.lineTo(450.5, 150.5);    cxt.stroke();}

canvas,繪制路徑,線段

從圖中我們可以看出,我們將兩條線段的lineWidth都是設(shè)置為1像素,但是上面的線段畫出的卻是兩像素。 

如果你在某2個(gè)像素的邊界處繪制一條1像素寬的線段,那么該線段實(shí)際會(huì)占據(jù)2個(gè)像素的寬度;

因?yàn)楫?dāng)你在像素邊界處繪制一條1像素寬度的垂直線段時(shí),canvas的繪圖環(huán)境對(duì)象會(huì)試著將半個(gè)像素畫在邊界中線的右邊,將另外半個(gè)像素畫在邊界中線的左邊。

然而,在一個(gè)整像素的范圍內(nèi)繪制半個(gè)像素寬的線段是不可能的,所以在左右兩個(gè)方向上的半個(gè)像素都被擴(kuò)展為1個(gè)像素。

另外一方面,繪制在兩個(gè)像素之間,這樣的話,中線左右兩端的那半個(gè)像素就不會(huì)延伸,它們結(jié)合起來恰好占據(jù)1個(gè)像素的寬度。所以說,如果要繪制一條真正1像素寬度的線段,你必須將該線段繪制在某兩個(gè)像素之間

canvas,繪制路徑,線段

網(wǎng)格的繪制

既然我們已經(jīng)明白了如何繪制真正的1像素的線段,那我們就開始繪制網(wǎng)格

function drawLine(stepx, stepy){    cxt.lineWidth = 0.5;    cxt.strokeStyle = 'green';    //繪制豎線    for(var i= stepx + 0.5; i< cxt.canvas.width; i+= stepx){        cxt.beginPath();        cxt.moveTo(i, 0);        cxt.lineTo(i, cxt.canvas.height);        cxt.stroke();    }    //繪制橫線    for(var i= stepy + 0.5; i< cxt.canvas.height; i+= stepy){        cxt.beginPath();        cxt.moveTo(0, i);        cxt.lineTo(cxt.canvas.width, i);        cxt.stroke();    }}drawLine(10, 10);

canvas,繪制路徑,線段

上面例子中我們將線段繪制在兩個(gè)像素之間的像素上,而且繪制出來的線段僅有0.5像素寬,

雖說canvas規(guī)范沒有明文規(guī)定,不過所有瀏覽器的Canvas實(shí)現(xiàn)都使用了“抗鋸齒”技術(shù),以便創(chuàng)建出“亞像素”線段的繪制效果來

總結(jié)

本節(jié)內(nèi)容主要講解canvas中路徑中線性路徑的繪制方法,主要是利用 moveTo()定義起點(diǎn),lineTo()定義終點(diǎn),stroke()描繪當(dāng)前路徑。這三個(gè)方法繪制線段

canvas中繪制路徑有兩個(gè)重要的方法,beginPath()與closePath()。繪制圖形之前先調(diào)用beginPath()是繪制多個(gè)圖形必要的步驟。

closePath()在使用fill()時(shí)是可以省略的,而且還要注意closePath()方法的調(diào)用位置。

繪制線段時(shí)我們可以使用 lineWidth改變線段的寬度,strokeStyle改變線段的顏色。

弄清楚線段的像素邊界,這樣我們才能繪制出真正的1像素線寬的線段。

對(duì)canvas繪制圖形感興趣的同學(xué),請(qǐng)持續(xù)關(guān)注后續(xù)更新,如有不對(duì)的地方也請(qǐng)指出并多多交流。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
精精国产xxxx视频在线播放| 成人不用播放器| 亚洲一区二区电影| 91欧美视频在线| 精品福利在线| 91久久综合亚洲鲁鲁五月天| 欧美在线亚洲一区| 青青视频一区二区| a黄色在线观看| 国产91亚洲精品一区二区三区| 天天影视涩香欲综合网| 天天操天天操天天色天天要| 欧美日韩一区三区| 国产精品色悠悠| 1024精品久久久久久久久| 国产精品久久久久久av福利软件| 手机av免费在线观看| 免费视频一区二区三区在线观看| 国产乱肥老妇国产一区二| 99久久精品99国产精品| 国产精品中文久久久久久| 国产精品传媒精东影业在线| 国产网站免费看| 日韩欧美在线一区| 九色综合国产一区二区三区| 日韩一区二区三区免费观看| 精品一区中文字幕| 91精品国产综合久久久久| 欧美成人精品网站| 丁香花电影在线观看完整版| 日韩**一区毛片| 一个人看的www片免费高清视频| 久久精品亚洲成在人线av网址| 国产亚洲视频一区| 污视频免费在线观看| 蜜臀国产一区二区三区在线播放| 日韩一区二区免费高清| 国产精品成人一区二区三区电影毛片| 中文字幕欧美专区| 日韩精品a在线观看91| 日韩欧美一区二区三区在线观看| 精品国内亚洲在观看18黄| 国内成人精品| 在线看片日韩| 欧美性受xxxx黑人爽| 欧美日韩国产美| 小说区图片区综合久久亚洲| 亚洲日本在线a| 久久久久99精品成人| 神马久久精品| 白丝校花扒腿让我c| 亚洲精品久久| gogogo高清在线观看一区二区| 夜夜嗨一区二区三区| 国产精品一区二区三区免费观看| 亚洲欧美一区二区三区孕妇| 产国精品偷在线| 色爱综合网站| 久久精精品视频| 色琪琪一区二区三区亚洲区| 51妺嘿嘿午夜福利| 99久久99热这里只有精品| 国产精品无码一区二区桃花视频| 免费精品在线视频| 国产极品jizzhd欧美| 51调教丨国产调教视频| 蜜桃av一区二区在线观看| 成人xxxx| 手机在线免费看毛片| 国产性猛交96| 免费在线不卡视频| 2022国产精品视频| 91九色在线免费视频| 精品日韩在线观看| 精品国产123| 国产精品一区在线免费观看| 亚洲 小说区 图片区 都市| 鲁片一区二区三区| 影院欧美亚洲| 一本久道久久综合| 最近的2019中文字幕免费一页| 日韩大陆av| 99久久精品久久久久久ai换脸| 亚洲女同志亚洲女同女播放| 深夜福利网站| 欧美日韩国产一区二区三区地区| www.精品久久| 欧美国产亚洲精品| 日韩在线观看免费网站| 影音先锋中文字幕在线| 久久精品无码中文字幕| 欧美精品电影| 色的视频在线观看免费播放| 黑人玩弄人妻一区二区三区| 欧美激情精品久久久久久小说| 午夜精品一区二区三区视频免费看| jizz一区二区| 欧美狂猛xxxxx乱大交3| 久久一区二区三| 六月婷婷激情网| 美女航空一级毛片在线播放| 亚洲欧洲午夜一线一品| 五月天视频在线观看| 国产一区二区久久久久| 殴美一级黄色片| 91 视频免费观看| 成人免费一区二区三区| 黄色漫画在线免费看| 在线观看日韩一区二区| 一区二区高清免费观看影视大全| 免费污视频在线| 99视频国产精品| 久久久久久少妇| 国产特级黄色录像| 91福利在线尤物| 天天射综合网视频| 国产精品亚洲一区二区在线观看| av在线不卡电影| 操一操视频一区| 思思99热久久精品在线6| 欧美又黄又嫩大片a级| 国产喂奶挤奶一区二区三区| 欧美久久精品一级c片| 国产精品毛片久久久久久久| www.国产视频| 新狼窝色av性久久久久久| 亚洲国产日韩在线观看| 国产99精品一区| 欧美香蕉视频| 精品国产91洋老外米糕| 亚洲欧美视频在线观看| 大香煮伊手机一区| 日本激情视频在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美 激情 在线| 亚洲一区二区伦理| 色综合久久悠悠| 风流少妇一区二区三区91| 欧美成人女星排行榜| 色噜噜狠狠色综合欧洲selulu| 久久天天狠狠| 成人黄页网站视频| 动漫3d精品一区二区三区乱码| 911精品产国品一二三产区| 韩国日本不卡在线| 亚洲999一在线观看www| 亚洲精品97| 男人的天堂在线视频| 特级西西444www大精品视频免费看| 亚洲涩涩在线| www.亚洲免费av| 久草视频在线免费看| jzzjzzjzz亚洲成熟少妇| 亚洲三级久久久| 久久久久一区二区三区四区| 污视频在线免费| 在线亚洲a色| 欧美福利精品| 亚洲伦理在线精品| 美女福利一区| 96sao在线精品免费视频| 色视频www在线播放国产成人| 国产精品夜夜夜一区二区三区尤| wwwww在线观看| 天天色天天干天天色| 顶级网黄在线播放| 午夜福利视频一区二区| 精品视频第一区| jjzzjjzz欧美69巨大| 色一情一乱一乱一区91av| 亚洲精品国产一区二区三区| 久久综合国产精品| 操欧美女人视频| 成人自拍视频在线| 97久久精品视频| 亚洲精品2区| 亚洲天堂精品一区| 粉嫩精品导航导航| 嫩模一区二区三区| 激情另类综合| 人妻精品久久久久中文字幕| 99高清视频有精品视频| 久久精品免视着国产成人| 中文字幕2022永久在线| 女主播福利一区| 黄色成人在线观看| 国产无套粉嫩白浆在线2022年| 欧美亚洲在线日韩| 亚洲综合自拍| 国产成人午夜99999| 99热国产在线观看| 日韩免费视频一区二区视频在线观看| 日韩一区二区三区久久| 欧美成人三级伦在线观看| 黄色网在线免费观看| 久久天天躁狠狠躁夜夜躁2014| 日韩欧美xxxx| 欧美精品一区二区久久婷婷| 亚洲精品国产精品乱码| a级黄色片免费| 国产精品嫩草99av在线| 涩涩视频免费观看| 亚洲麻豆一区二区三区| 91亚洲国产成人精品一区| 午夜国产精品理论片久久影院| 熟妇人妻av无码一区二区三区| 中文字幕一区二区三| 久久精品视频在线观看免费| 国产又粗又猛又黄| av毛片免费看| 亚洲成人中文字幕| 国产免费黄色小视频| www.99av.com| 亚洲自拍偷拍第一页| 成人精品在线观看视频| 91一区二区在线| 国产精品久久久久影院老司| 国产亚洲色婷婷久久99精品| 中文字幕av影院| 在线一区免费观看| 亚洲国产成人无码av在线| 曰本色欧美视频在线| 精品欧美日韩在线| 日韩激情av在线播放| 日韩欧美黄色| 天堂在线中文| 久久亚洲国产精品| 欧美成a人片免费观看久久五月天| www.麻豆av| 搞黄视频在线观看| 国产熟女高潮一区二区三区| av成人在线观看| www.17c.com喷水少妇| 午夜日韩在线电影| 久久久国产一区二区三区| 可以免费在线看黄的网站| 外国成人免费视频| 日本一区二区三区中文字幕| 日本福利午夜视频在线| 欧美精品videossex少妇| 成人免费无码大片a毛片| 麻豆精品视频在线观看视频| 一区二区三区四区精品| 久久久久久久久久久久国产| 天天色天天操综合| 国产毛片久久久久久久| 动漫成人在线观看| 久久久久久九九| 久久福利毛片| 91麻豆国产语对白在线观看| 91麻豆精品国产91久久久使用方法| 欧美日韩一区二区在线观看| 国产剧情演绎av| 日本人妻丰满熟妇久久久久久| 黄色羞羞视频在线观看| 五月天最新网址| 免费高清在线观看免费| 69久久夜色精品国产69| 亚洲天堂av一区二区三区| 亚洲第一天堂无码专区| 丝袜亚洲另类欧美综合| 国产精品视频你懂的| 国产不卡精品视男人的天堂| 国产精品久久久久久久久久免费| 又黄又湿又爽又免费又色| 四虎永久免费在线观看| 91亚洲午夜在线| 欧美13videosex性极品| 亚洲电影一二三区| 乱码一区二区三区| 成人免费视频网站入口| 色综合中文字幕| 国产香蕉成人综合精品视频| 亚洲AV无码精品自拍| 美女做暖暖视频免费在线观看全部网址91| 国产又粗又硬又长| 亚洲一级黄色av| 国产成人精品无码播放| 亚洲人视频在线| 人妻av中文系列| 最近2019年中文视频免费在线观看| 全国精品久久少妇| 日韩精品 欧美| 欧美一区二区三区四区久久| 91久久久久国产一区二区| 亚洲欧美日韩三级| 日韩综合在线视频| 青青操在线观看视频| 免费在线黄色影片| 992tv成人国产福利在线| 草裙成人精品一区二区三区| 精品一区二区三区五区六区| 天堂在线中文视频| 大又大又粗又硬又爽少妇毛片| 韩国精品美女www爽爽爽视频| 午夜18视频在线观看| 日韩一区二区电影| 日本午夜精品久久久久| 色欲av伊人久久大香线蕉影院| 欧洲黄色一级视频| 国产日本在线播放| 精品国产aⅴ| 婷婷激情四射五月天| 野外做受又硬又粗又大视频√| 国产黄视频在线| 99热播在线观看| 精品成人无码久久久久久| 一卡二卡三卡在线观看| 久草网站在线观看| 一区二区三区四区乱视频| 美女福利一区| 精品国产一区二区三区久久久蜜臀| 日韩中文在线电影| 日韩精品午夜| 国产又色又爽又黄又免费| 91免费在线观看网站| 亚洲精品一区二区三区影院| 精品国产网站在线观看| 美女毛片一区二区三区四区最新中文字幕亚洲| 欧美一区二区激情视频| 777午夜精品福利在线观看| 毛片网站在线免费观看| 欧美gv在线观看| 51成人做爰www免费看网站| 超碰91在线观看| 狠狠色狠狠色综合人人| 污网站免费看| 国产精品免费观看在线|