본문 바로가기
공부/HTML5

Canvas3 선 긋기

by Ohming 2011. 11. 5.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
기본적으로 선을 그으려면
ctx.beginPath();         //새로운 도형을 그림
ctx.lineTo(10, 10);      //선이 시작할 좌표 설정
ctx.lineTo(100, 100);   //선이 끝나는 곳 좌표 설정
ctx.stroke();              //선 긋기
요게 기본이다.
여기에다 lineTo로 라인을 하나 더 그리면 이전 좌표에 연결해서 선이 그려진다.
ctx.stroke(); 전에 ctx.closePath(); 를 하면 도형 그리기가 종료되고, 선 긋기가 종료된 시점과 선 긋기가 최초로 시작된 지점이 연결된다.
ctx.fill();을 사용하면 도형의 색을 채울 수 있고, ctx.stroke();를 사용하면 안이 채워지지는 않고 테두리만 그려진 삼각형이 완성된다.

한 Canvas 안에 선 두개 이상을 그릴때는 moveTo() 메소드가 유용하다.
 <!DOCTYPE HTML>
<html>
    <head>
    <title>Canvas 공부</title>
        <script type="text/javascript">
            var make_canvas = function(){    //페이지가 열리자마자 호출될 make_canvas 함수
            var exam = document.getElementById('exam');
            var ctx = exam.getContext('2d');
            ctx.beginPath();    //새로운 도형을 그림
            //첫번째 선
            ctx.lineTo(10, 10);
            ctx.lineTo(100, 160);
            ctx.stroke();

            //두번째 선
            ctx.moveTo(30, 10);    //두번째 선이 시작할 좌표
            ctx.lineTo(130, 160);
            ctx.stroke();
            ctx.closePath();    //도형 그리기를 종료
        };
        </script>
        <style type = "text/css">
            #exam { border : 1px solid #000000; }
        </style>
    </head>
    <body onload = "make_canvas();">
        <canvas id = "exam" width = "200" height = "200"></canvas>
    </body>
</html>
moveTo()를 이용하면 원하는 좌표에서 그리기를 다시 시작할 수 있다. 마치 연필로 그림을 그릴 때 펜을 종이에서 뗐다가 다른 곳으로 이동시킬때와 같다. 이걸 안써준다면 선이 이어지게 된다.

결과 화면




선에 스타일도 줄 수 있는데

ctx.lineWidth = 15               //선 두께 지정 (선 두께를 따로 설정해 주지 않으면 기본 두께는 1.0이다.

ctx.lineCap = 'round'          //선의 끝 부분을 둥글게. lineCap에서 사용할 수 있는 스타일은 butt(기본), round, square가 있다.

ctx.strokeStyle = "#000000";  //선의 색상

ctx.lineJoin = "round"          //선이 꺾이는 부분의 모양. round, bevel(뚝 잘린 것 같이), miter(뾰족하게)


베지어 곡선 그리기
ctx.quadraticCurveTo(cpx, cpy, x, y);                   //2차 베지어 곡선
ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);  //3차 베지어 곡선
2차 베지어 곡선과 3차 베지어 곡선은 곡선 패스를 컨트롤할 수 있는 컨트롤 포인트의 개수가 다를뿐이다. 당연히 포인트가 하나 더 많은 3차 베지어 곡선이 더 디테일한 그림을 그릴 수있다.
베지어 곡선을 연달아 사용하면 복잡한 그림을 그릴 수 있다.

요소 합성하기
 <!DOCTYPE HTML>
<html>
    <head>
    <title>Canvas 공부</title>
        <script type="text/javascript">
            var make_canvas = function(){    //페이지가 열리자마자 호출될 make_canvas 함수
            var exam = document.getElementById('exam');
            var ctx = exam.getContext('2d');
            
            //빨간색 사각형 그리기
            ctx.fillStyle = "#ff0000";
            ctx.fillRect(15, 15, 100, 100);
            //합성
            ctx.globalCompositeOperation = "source-over";
globalCompositeOperation속 성에서 사용할 수 있는 값은 source-over(기본값), source-in, source-out, destination-over, destination-in, destiination-out, lighter, darker, xor, source-atop, source-over, destination-atop 이 있다.

            //파란색 동그라미 그리기
            ctx.fillStyle = "#0000ff";
            ctx.beginPath();
            ctx.arc(100, 100, 50, 0, Math.PI*2, false);
            ctx.fill();
        };
        </script>
        <style type = "text/css">
            #exam { border : 1px solid #000000; }
        </style>
    </head>
    <body onload = "make_canvas();">
        <canvas id = "exam" width = "200" height = "200"></canvas>
    </body>
</html>

결과 화면


'공부 > HTML5' 카테고리의 다른 글

웹 폼  (0) 2011.11.05
그림자와 그라데이션 구현하기  (0) 2011.11.05
Canvas2 사각형 그리기  (0) 2011.11.04
Canvas1 그림 그리기 준비  (0) 2011.11.04
시멘틱 웹 [semantic web]  (0) 2011.11.04

댓글