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

首頁 > 編程 > HTML > 正文

詳解通過HTML5 Canvas實現圖片的平移及旋轉變化的

2020-03-24 18:26:16
字體:
來源:轉載
供稿:網友
平移變換translate()
平移變換,故名思議,就是一般的圖形位移。比如這里我想將位于(100,100)的矩形平移至(200,200)點。那么我只要在繪制矩形之前加上context.translate(100,100)即可。這里的translate()只傳入兩個參數,其實就是新畫布坐標系原點的坐標。下面結合代碼來看看效果。XML/HTML Code復制內容到剪貼板
style body{background:url( ./images/bg3.jpg )repeat;} #canvas{border:1pxsolid#aaaaaa;display:block;margin:50pxauto;} /style /head body divid= canvas-warp canvasid= canvas 你的瀏覽器居然不支持Canvas?!趕快換一個吧!! /canvas /div script window.onload=function(){ varcanvas=document.getElementById( canvas canvas.width=800; canvas.height=600; varcontext=canvas.getContext( 2d context.fillStyle= #FFF ; context.fillRect(0,0,800,600); context.fillStyle= #00AAAA ; context.fillRect(100,100,200,100); context.fillStyle= red ; context.translate(100,100); context.fillRect(100,100,200,100); }; /script /body /html
運行結果:
這里的藍色矩形,是矩形原來的位置,然后調用translate()方法,將矩形位移至(200,200),即紅色矩形的位置。我們來用一張圖看看,它是怎么做到平移變換的。
沒錯,其實這里的平移變換實質就是在平移坐標系,而對translate()傳入的參數,實質就是新坐標系相對于舊坐標系的原點。這使得我們依舊是在(100,100)繪制的紅色矩形,在平移坐標系之后,變到了(200,200)處。注意使用狀態保存:
其實這里有一個坑,我們如果想把矩形平移至(300,300)怎么辦呢?或許我們會想,直接調用context.translate(200,200)就可以了。好,我們看看效果。JavaScript Code復制內容到剪貼板
style body{background:url( ./images/bg3.jpg )repeat;} #canvas{border:1pxsolid#aaaaaa;display:block;margin:50pxauto;} /style /head body divid= canvas-warp canvasid= canvas 你的瀏覽器居然不支持Canvas?!趕快換一個吧!! /canvas /div script window.onload=function(){ varcanvas=document.getElementById( canvas ); canvas.width=800; canvas.height=600; varcontext=canvas.getContext( 2d ); context.fillStyle= #FFF ; context.fillRect(0,0,800,600); context.fillStyle= #00AAAA ; context.fillRect(100,100,200,100); context.fillStyle= red ; context.translate(100,100); context.fillRect(100,100,200,100); context.fillStyle= green ; context.translate(200,200); context.fillRect(100,100,200,100); }; /script /body /html
運行結果:
這里的綠色矩形并沒有如我們所愿在(300,300)位置處,而是跑到了(400,400)這里。為什么呢?想必大家已經知道了答案 Canvas是基于狀態的繪制。在我們第一次平移之后,坐標系已經在(100,100)處了,所以如果繼續平移,這個再基于新坐標系繼續平移坐標系。那么要怎么去解決呢?很簡單,有兩個方法。第一,在每次使用完變換之后,記得將坐標系平移回原點,即調用translate(-x,-y)。第二,在每次平移之前使用context.save(),在每次繪制之后,使用context.restore()。切記,千萬不要再想著我繼續緊接著第一次平移之后再平移translate(100,100)不就行了,這樣你自己的坐標系就會亂套,根本找不到自己的坐標系原點在哪,在多次變換或者封裝函數之后,會坑死你。所以一定要以最初狀態為最根本的參照物,這是原則性問題。這里我建議使用第二種方法,而且在涉及所有圖形變換的時候,都要這么處理,不僅僅是平移變換。具體使用如下。JavaScript Code復制內容到剪貼板
style body{background:url( ./images/bg3.jpg )repeat;} #canvas{border:1pxsolid#aaaaaa;display:block;margin:50pxauto;} /style /head body divid= canvas-warp canvasid= canvas 你的瀏覽器居然不支持Canvas?!趕快換一個吧!! /canvas /div script window.onload=function(){ varcanvas=document.getElementById( canvas ); canvas.width=800; canvas.height=600; varcontext=canvas.getContext( 2d ); context.fillStyle= #FFF ; context.fillRect(0,0,800,600); context.fillStyle= #00AAAA ; context.fillRect(100,100,200,100); context.save(); context.fillStyle= red ; context.translate(100,100); context.fillRect(100,100,200,100); context.restore(); context.save(); context.fillStyle= green ; context.translate(200,200); context.fillRect(100,100,200,100); context.restore(); }; /script /body /html

旋轉變換rotate()同畫圓弧一樣,這里的rotate(deg)傳入的參數是弧度,不是角度。同時需要注意的是,這個的旋轉是以坐標系的原點(0,0)為圓心進行的順時針旋轉。所以,在使用rotate()之前,通常需要配合使用translate()平移坐標系,確定旋轉的圓心。即,旋轉變換通常搭配平移變換使用的。最后一點需要注意的是,Canvas是基于狀態的繪制,所以每次旋轉都是接著上次旋轉的基礎上繼續旋轉,所以在使用圖形變換的時候必須搭配save()與restore()方法,一方面重置旋轉角度,另一方面重置坐標系原點。JavaScript Code復制內容到剪貼板

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 克东县| 贵溪市| 睢宁县| 平度市| 德格县| 宾川县| 舞钢市| 长乐市| 定襄县| 衡阳市| 庆城县| 西昌市| 南和县| 沈丘县| 南木林县| 晴隆县| 清远市| 太保市| 抚州市| 平乡县| 灌云县| 寿阳县| 长岛县| 湖口县| 左云县| 古田县| 阆中市| 称多县| 广州市| 曲靖市| 京山县| 犍为县| 汉川市| 彭州市| 赤水市| 侯马市| 新乐市| 台北市| 商南县| 任丘市| 永春县|