HTML5 Canvas API 變換(translate函數)


下面我們來看下在canvas上繪制圖像的另一種方式——變換(translate函數的應用):

下面的代碼:我們還是實現上篇文章的效果:畫一條斜線。理論上的知識,自己買書去看吧!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>轉換</title>
    <style type="text/css">
        #diagonal
        {
            border: 1px solid red;
            width: 200px;
            height: 200px;
        }
    </style>
    <script type="text/javascript">
        function drawDiagonal() {
            //取得canvas元素及其繪圖上下文
            var canvas = document.getElementById("diagonal");
            var context = canvas.getContext("2d");
        //保存當前繪畫狀態,以便我們畫完這副畫以后,再恢復到這個狀態,畫另一副畫。
context.save();         //向右下方移動繪圖上下文
context.translate(
70, 140); //以原點為起點,繪制與前面相同的線段
context.beginPath(); context.moveTo(0, 0); context.lineTo(70, -70); //將這條線繪制到canvas畫布上去。 context.stroke();         //恢復原有的繪圖狀態
context.restore();         //可以開始另外一副繪圖。。。。。。
} window.addEventListener(
"load", drawDiagonal, true); </script> </head> <body> <canvas id="diagonal"> </canvas> </body> </html>

(請注意加紅色背景的字)
1、首先通過ID找到並訪問canvas對象。

2、接着通過調用canvas對象的getContext函數獲取上下文對象。

3、接下來,保存尚未修改的context對象,這樣我們即使通過moveTo、lineTo、translate等操作后,我們還是可以恢復到這個狀態,然后開始繪畫另一個副圖,或者另外一些操作。

4、下一步是在context中調用translate函數。通過這個操作,當進行平移行為(moveTo)發生時,我們的提供的變換坐標{translate(70,140)}會被加到結果坐標{moveTo(0,0)}上去,結果移動到了坐標點(70,140){即橫向:70,縱向:140}(我們暫時稱坐標A吧)上面了。

5、上一步完成后,我們調用lineTo(70,-70),意思是在上一個坐標點(70,140)上橫向加70(70+70=140),縱向減70(140-70=70),於是我們得一點(140,70)(我們暫時稱為坐標B吧),得到兩個坐標點后,lineTo方法告訴我們用一條直線把A、B這兩個坐標點連起來。

其它上篇已介紹過,就不多說了。如果覺得我理解錯了,希望你能幫我指出來。在這里我還要向 artwl 表示感謝,他對我上某篇文章寫的不好處的賜教。真心希望大家能賜教。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM