본문 바로가기
# Work/└ html5&css3

canvas 요소 2

by 호정찐 2013. 11. 13.
반응형

#베지에 곡선 그리기


- 2차 베지에 곡선

quadraticCurveTo(제어점x, 제어점y, 종료점x, 종료점y)



<예시>

context.moveTo(50, 50);

context.quadraticCurveTo(200, 200, 400, 50);

context.stroke();


- 3차 베지에 곡선

bezierCurveTo(제어점x1, 제어점y1, 제어점x2, 제어점y2, 종료점x, 종료점y)



<예시>

context.moveTo(50, 50);

Context. bezierCurveTo(70, 200, 150, 200, 200, 50);

context.stroke();


context.beginPath();

context.moveTo(50,50);

context.quadraticCurveTo(200, 350, 350, 50);

context.stroke();


context.beginPath();

context.moveTo(350,350);

context.bezierCurveTo(300, 50, 600, 100, 650, 350);

context.fill();



# 선 스타일 지정

1. lineWidth : 선 두께 지정 (기본 1.0)

2. lineCap : 선 끝부분의 스타일 지정 (butt, round, square)

3. lineJoin : 선이 꺾이는 부분의 스타일 지정 (bevel, round, miter)

4. strokeStyle : 선 색 지정


1.lineWidth

context.moveTo(150, 50);

context.lineTo(150, 200);

context.lineWidth = 5;

context.stroke();

2. lineCap (기본-butt)

context.lineCap = ' 속성 값'



3. lineJoin (기본-miter)

context.lineJoin = ' 속성 값'



4. strokeStyle

context.strokeStyle = ' 속성 값'


<<선 그리기 예시>>

<!DOCTYPE html>

<html>

<head>

  <meta charset="utf-8" />

  <title> 선 스타일 지정하기 </title>

  <script type="text/javascript">

    function line()

    {

      var canvas = document.getElementById('canvas');

      context = canvas.getContext('2d');


      context.beginPath();

      context.moveTo(50,50);

      context.lineTo(250,350);

      context.lineTo(250,100);

      context.lineWidth = 25;

      context.strokeStyle = '#00FF00';

      context.lineCap = 'round';

      context.lineJoin = 'miter';

      context.stroke();

    }

  </script>

</head>


<body onload="line();">

  <canvas id="canvas" width="300" height="400" style="border:solid 1px #000000">

    canvas 사용하기

  </canvas>

</body>

</html>



# 단색 채우기 스타일 지정 (fill style)


context.fillStyle = '속성값';

<!DOCTYPE html>

<html>

<head>

  <meta charset="utf-8" />

  <title> 채우기 </title>

  <script type="text/javascript">

    function rect()

    {

      var canvas = document.getElementById('canvas');

      context = canvas.getContext('2d');


      context.lineWidth = 15;

      

      context.fillStyle = 'red';

      context.fillRect(30, 30, 150, 150);

      

      context.strokeStyle = 'blue';

      context.strokeRect(30, 30, 150, 150);

   

    }

  </script>

</head>


<body onload="rect();">

  <canvas id="canvas" width="210" height="210" style="border:solid 1px #000000">

    canvas 사용하기

  </canvas>

</body>

</html>


=========> fillStyle을 먼저 지정해주느냐 strokeStyle을 먼저 지정해주느냐에 따라 선 두께가 달라짐.

(선의 중간부분정도 부터 fill영역이므로... stokeStyle을 나중에 지정해주어야 원하는 두께를 얻을 수 있다. )




# globalAlpha 속성 (색의 투명도 지정 ( 0.0 ~ 1.0 ))


context.globalAlpha='속성값'



# 선형 그라데이션 효과

1. createLinearGradient( x1, y1, x2, y2 ) : 선형 그라데이션 지정

2. createRadialGradient( x1, y1, r1, x2, y2, r2 ) : 원형 그라데이션 지정

3. addColorStop (오프셋, 색상) : 그라데이션 경계색 지정


var 변수 = context.createLinearGradient(x1, y1, x2, y2);

변수.addColorStop(시작점, 색상);

변수.addColorStop(중간점, 색상); // 생략가능

변수.addColorStop(끝점, 색상);

context.fillStyle = 변수;

시작점(0) - 중간점 (0.x) - 끝점 (1)


var gradient = context.createLinearGradient(0, 0, 150, 150);

gradient.addColorStop(0, 'blue');

gradient.addColorStop(0.5, 'yellow');

gradient.addColorStop(1, 'red');

context.fillStyle = gradient;

context.fillRect(0, 0, 150,150);

context.fillRect(0, 0, 150,150); => 이 값이 바뀔때 예시.


context.createLinearGradient(0, 0, 150, 150); => 이 값이 바뀔때 예시 (그라데이션의 방향을 바꿀때)





# 원형 그라데이션 효과

var 변수 = context.createRadialGradient(x1, y1, r1, x2, y2, r2);

변수.addColorStop(시작점, 색상);

변수.addColorStop(끝점, 색상);

context.fillStyle = 변수;

<!DOCTYPE html>

<html>

<head>

  <meta charset="utf-8" />

  <title> 원호 그리기 </title>

  <script type="text/javascript">

    function rect()

    {

      var canvas = document.getElementById('canvas');

      context = canvas.getContext('2d');


        var gradient = context.createRadialGradient(100, 100, 10, 100, 100, 90);

gradient.addColorStop(0,"yellow");

gradient.addColorStop(1,"blue");

context.fillStyle = gradient;

//context.arc(100,100,90,0, 360*Math.PI/180, true);

        //context.fill();

        context.fillRect(25, 25, 150, 150);


    }

  </script>

</head>


<body onload="rect();">

  <canvas id="canvas" width="200" height="200" style="border:solid 1px #000000">

    canvas 사용하기

  </canvas>

</body>

</html>



반응형