YesCoding

search:

Canvas API 2 - μΊ”λ²„μŠ€μ— λ„ν˜• 그리기

MDN + 기타 μžλ£Œλ“€μ„ κ³΅λΆ€ν•˜λ©° μ΄ν•΄ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

κ·Έλ¦¬λ“œ (ν˜Ήμ€ μ’Œν‘œκ³΅κ°„) λΌλŠ” κ°œλ…μ„ 이해해야 ν•œλ‹€. 기본적으둜 κ·Έλ¦¬λ“œμ˜ 1λ‹¨μœ„λŠ” μΊ”λ²„μŠ€μ˜ 1픽셀이닀. κ·Έλ¦¬λ“œμ˜ 원점은 μ’ŒμΈ‘μƒλ‹¨ (0,0) 이고, λͺ¨λ“  μš”μ†Œλ“€μ€ 이 원점을 κΈ°μ€€μœΌλ‘œ μœ„μΉ˜λœλ‹€. 이 κ°œλ…μ΄ μ€‘μš”ν•œλ°, μΊ”λ²„μŠ€ μ•ˆμ— μžˆλŠ” λͺ¨λ“  λ„ν˜•λ“€μ˜ μœ„μΉ˜λ„ 각 λ„ν˜•μ˜ μ’ŒμΈ‘μƒλ‹¨ 원점을 κΈ°μ€€μœΌλ‘œ μž‘λŠ”λ‹€.

μ§μ‚¬κ°ν˜• 그리기

<canvas>λŠ” μ§μ‚¬κ°ν˜• ν•˜λ‚˜λ§Œ 기본적으둜 μ œκ³΅ν•˜λ©°, λ‹€λ₯Έ λ„ν˜•λ“€μ€ ν•˜λ‚˜ ν˜Ήμ€ ν•˜λ‚˜ μ΄μƒμ˜ Path 와 μ—¬λŸ¬ 점으둜 이어진 μ„ μœΌλ‘œ λ§Œλ“€μ–΄μ§„λ‹€.

fillRect(x, y, width, height) - μƒ‰μΉ λœ μ§μ‚¬κ°ν˜•μ„ κ·Έλ¦°λ‹€. strokeRect(x, y, width, height) - μ§μ‚¬κ°ν˜• μœ€κ³½μ„ μ„ κ·Έλ¦°λ‹€. clearRect(x, y, width, height) - νŠΉμ • 뢀뢄을 μ§€μš°λŠ” μ§μ‚¬κ°ν˜•μ΄λ©°, 이 μ§€μ›Œμ§„ 뢀뢄은 μ™„μ „νžˆ 투λͺ…해진닀.

drawing rect with canvas

경둜(Path) 그리기

<canvas> μš”μ†Œμ—μ„œ μ§μ‚¬κ°ν˜• μ΄μ™Έμ˜ λͺ¨λ“  λ„ν˜•κ³Ό 선을 λ§Œλ“œλŠ” 것은 경둜 path 이닀. κ²½λ‘œλŠ” μ λ“€μ˜ 집합이며, 점듀이 λͺ¨μ—¬ 선이 μ—¬λŸ¬κ°€μ§€ λ„ν˜•, 곑선을 λ§Œλ“€κ³  λ‘κ»˜μ™€ 색도 λ‚˜νƒ€λ‚Έλ‹€.

κ·Έλ¦¬λŠ” 단계

  1. 경둜λ₯Ό μƒμ„±ν•œλ‹€. beginPath() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 경둜λ₯Ό μƒμ„±ν•œλ‹€. κ²½λ‘œλŠ” λ„ν˜•μ„ μ΄λ£¨λŠ” ν•˜μœ„κ²½λ‘œ (μ„ , μ•„μΉ˜ λ“±)λ“€μ˜ μ§‘ν•©μœΌλ‘œ μ΄λ£¨μ–΄μ§€λŠ”λ°, beginPath λ©”μ†Œλ“œκ°€ 호좜될 λ•Œλ§ˆλ‹€ ν•˜μœ„ 경둜의 λͺ¨μŒμ€ μ΄ˆκΈ°ν™”λ˜λ©°, μƒˆλ‘œμš΄ λ„ν˜•μ„ 그릴수 μžˆλ‹€. 경둜λ₯Ό μ΄ˆκΈ°ν™”ν•œ μ§ν›„μ—λŠ” 항상 λͺ…ν™•ν•˜κ²Œ moveTo(x, y) 둜 μ‹œμž‘ μœ„μΉ˜λ₯Ό μ„€μ •ν•˜λŠ” 것이 μ’‹λ‹€.

  2. 그리기 λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ κ²½λ‘œμƒμ— κ·Έλ¦°λ‹€. κ²½λ‘œκ°€ μƒμ„±λ˜λ©΄, 이후 그리기 λͺ…령듀은 경둜λ₯Ό κ΅¬μ„±ν•˜κ³  λ§Œλ“œλŠ”λ° μ‚¬μš©λœλ‹€.

  3. κ²½λ‘œκ°€ ν•œλ²ˆ λ§Œλ“€μ–΄μ§€λ©΄, 경둜λ₯Ό λ Œλ”λ§ ν•˜κΈ° μœ„ν•΄μ„œ μœ€κ³½μ„ μ„ κ·Έλ¦¬κ±°λ‚˜ λ„ν˜• λ‚΄λΆ€λ₯Ό μ±„μšΈ 수 μžˆλ‹€.

  4. μ„ νƒμ‚¬ν•­μœΌλ‘œ closePath() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€. ν˜„μž¬ 점 μœ„μΉ˜μ™€ μ‹œμž‘μ  μœ„μΉ˜λ₯Ό μ§μ„ μœΌλ‘œ μ΄μ–΄μ„œ λ„ν˜•μ„ λ‹«λŠ”λ‹€. fill() λ©”μ†Œλ“œ 호좜 μ‹œ μ—΄λ¦° λ„ν˜•μ€ μžλ™μœΌλ‘œ λ‹«νžˆκ²Œ λ˜μ–΄ closePath() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

μ‚Όκ°ν˜• 그리기

drawing triangle with canvas

경둜λ₯Ό μƒμ„±ν•˜κ³ , νŽœμ„ μ • κ°€μš΄λ° μ§€μ μœΌλ‘œ μ΄λ™μ‹œν‚¨ λ‹€μŒ, κ°€μš΄λ° 지점 (150, 150) μ—μ„œ μœ„λ‘œ λ»—λŠ” 직선 (170, 130) 1개, (170, 130) μ’Œν‘œμ—μ„œ μ•„λž˜λ‘œ λ»—λŠ” 직선 1개 (170, 170) λ₯Ό 그리고 fill() ν•˜λ©΄ μ„Έ 지점이 μ§μ„ μœΌλ‘œ μ—°κ²°λ˜μ–΄ 색깔이 칠해지고 μ‚Όκ°ν˜•μ΄ λœλ‹€.

lineTo(x,y) 직선을 그릴 λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€. μ§μ„ μ˜ μ‹œμž‘μ μ€ 직전 경둜의 끝점이닀. x, y μ’Œν‘œλ‘œ μ΄μ–΄μ§€λŠ” 직선을 κ·Έλ €μ€€λ‹€.

moveTo(x,y) μ‹œμž‘μ μ„ x, y μ’Œν‘œλ‘œ μ΄λ™μ‹œν‚€λŠ” λ©”μ†Œλ“œμ΄λ‹€.

fill() 과 stroke() 의 차이?

fill()은 경둜 μ•ˆμ„ λͺ¨λ‘ μ±„μ›Œλ²„λ¦¬κ³ , stroke λŠ” μœ€κ³½μ„ λ§Œ κ·Έλ €μ£ΌλŠ” λ©”μ†Œλ“œμ΄λ‹€. fill 은 경둜λ₯Ό μ±„μš°λ©΄μ„œ κ·Έ λ„ν˜•μ„ μžλ™μœΌλ‘œ λ‹«λŠ”λ°, μœ€κ³½μ„  μ‚Όκ°ν˜•μ—μ„œλŠ” 그렇지 μ•ŠκΈ° λ•Œλ¬Έμ— 두 μ„ λ§Œ κ·Έλ €μ§€λ―€λ‘œ, λ°˜λ“œμ‹œ closePath() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.

경둜 μ•ˆ λ‹«μ•„μ€€ 경우

drawing triangle with no closePath

경둜 λ‹«μ•„μ€€ 경우

drawing triangle with closePath

Β© Copyright 2022, yesCoding