[JS] ์บ๋ฒ์ค Canvas ๋ํ ํ๋ ์ถ์ ํ ์์ ์กฐ์ ํ๊ธฐ
๋ํ ์ฌ์ด์ฆ ์กฐ์ ๋ฉ์๋
ctx.scale(x, y)
: ๋ํ ํฌ๊ธฐ ํ๋/์ถ์. ์บ๋ฒ์ค์์ 1 ๋จ์๋ 1ํฝ์
. scale(2, 2)
๋ ํ๋์ ๋จ์๋ฅผ 2ํฝ์
๋ก ํ๋(์ขํ ์ฌ์ด์ ๊ฐ๊ฒฉ ์ฆ๊ฐ)
ctx.translate(x, y)
: ์บ๋ฒ์ค์ ์์ ์ด๋. ๊ธฐ๋ณธ๊ฐ์ ์ผ์ชฝ ์ข์๋จ (0, 0)
ctx.rotate(angle)
: ๋ํ์ ๋ผ๋์(angle) ๋จ์ ๋งํผ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ . ํญ์ ์บ๋ฒ์ค ์์ ์ด ํ์ ์ ์ค์ฌ
ctx.transform(scaleX, skewX, skewY, scaleY, translateX, translateY)
- scale(), rotate(), translate() ์ผ๊ด ์ ์ฉํ๋ ๋ฉ์๋
- ์ด์ ๋ณํ ๊ฒฐ๊ณผ ๊ฐ์ ์ด์ด์ ์ํ
- ์ด๊ธฐ ์ํ์์ transform(1.2, 0, 0, 1.2, -30, -30)์ 3๋ฒ ์ํํ๊ณ Matrix ์ ๋ณด๋ฅผ ํ์ธํด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค. ์ด์ ์ ์ํํ Matrix ๊ฒฐ๊ณผ ๊ฐ์ ์ด์ด์ transform()์ด ์ ์ฉ๋๊ธฐ ๋๋ฌธ
console.log(ctx.getTransform());
// ์ถ๋ ฅ ๊ฒฐ๊ณผ: 1.72, 0, 0, 1.72, -90, -90
// scaleX ๋ณํ ๊ณผ์ : 1 * 1.2 * 1.2 * 1.2 = 1.72
// scaleY ๋ณํ ๊ณผ์ : 1 * 1.2 * 1.2 * 1.2 = 1.72
// translateX ๋ณํ ๊ณผ์ : 0 - 30 - 30 - 30 = -90
// translateY ๋ณํ ๊ณผ์ : 0 - 30 - 30 - 30 = -90
ctx.setTransform(scaleX, skewX, skewY, scaleY, translateX, translateY)
- ์ด์ ์ค์ ๊ฐ์ ๋ฌด์ํ๊ณ transform() ์คํ
- transform(1, 0, 0, 1, 0, 0)์ธ ์ํ์์ transform() ์คํํ๋ ๊ฒ๊ณผ ๋์ผ
ctx.getTransform()
: ํ์ฌ Matrix ์ ๋ณด ์กฐํ
console.log(ctx.getTransform());
// DOMMatrix {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, ...}
ctx.resetTransform()
: ํ์ฌ Matrix ์ ๋ณด ์ด๊ธฐํ
console.log(ctx.getTransform()); // 1.2, 0, 0, 1.2, -64, -87, ...
ctx.resetTransform(); // ํน์ ctx.setTransform(1, 0, 0, 1, 0, 0)
console.log(ctx.getTransform()); // 1, 0, 0, 1, 0, 0
scale() ์คํ ํ ์์ ์กฐ์
์บ๋ฒ์ค์์ `scale(2, 2)`๋ฅผ ์ ์ฉํ๋ฉด ๋ชจ๋ ๊ทธ๋ํฝ ์์(๋ํ)์ ํฌ๊ธฐ๊ฐ 2๋ฐฐ๋ก ๋์ด๋๋ฏ๋ก, `scale()` ์ ์ฉ ์ ์บ๋ฒ์ค ์ค์์ ๊ทธ๋ ธ๋ ๋ํ์ ์๋์ฒ๋ผ ๊ฐ์ฅ์๋ฆฌ๋ง ๋ณด์ธ๋ค.
์ฐธ๊ณ ๋ก `scale()` ์ํ์ ์ค์ ์บ๋ฒ์ค์ ๋ฌผ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ๋์ด๋๋ ๊ฒ์ ์๋์ง๋ง(๋
ผ๋ฆฌ์ ํ๋) ์๋๋ ์ค๋ช
์ ํธ์๋ฅผ ์ํด ์บ๋ฒ์ค ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ ๊ฒ์ฒ๋ผ ์ค๋ช
ํ๋ค.
๋์ด๋ ์บ๋ฒ์ค ํฌ๊ธฐ(width, height)์ ์ ๋ฐ๋งํผ ์์ ์ ์ด๋์ํค๋ฉด ์บ๋ฒ์ค๊ฐ ์คํฌ๋ฆฐ ๊ฐ์ด๋ฐ ๋ณด์ด๋๋ก ์กฐ์ ํ ์ ์๋ค.
- ์๋ ์บ๋ฒ์ค ํฌ๊ธฐ๊ฐ width
600
, height400
์ด๋ผ๊ณ ๊ฐ์ scale(2, 2)
ํ ์บ๋ฒ์ค ํฌ๊ธฐ๋ width1200
, height800
- ํ๋ ์ /ํ ์บ๋ฒ์ค ํฌ๊ธฐ ์ฐจ์ด๋ width
600
, height400
- ๋์ด๋ ํฌ๊ธฐ์ ์ ๋ฐ๋งํผ ์์ ์ ์ด๋์ํค๋ฉด ๋ํ์ด ์คํฌ๋ฆฐ ์ ์ค์์ ์์น
translate(-300, -200)
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๊ฒฝ๊ณผ ์๊ฐ ํ์ / UTC / ISO 8601 (0) | 2024.04.25 |
---|---|
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ค ์ซ์, ๋ฐ์ดํฐ ์์ฑ ์์ (0) | 2024.04.25 |
[React] Canvas API ๊ธฐ๋ณธ ๋ด์ฉ ์ ๋ฆฌ / ๋ฆฌ์กํธ์์ ์ฌ์ฉ๋ฒ (0) | 2024.04.24 |
[TS] ํ์ ์คํฌ๋ฆฝํธ - ํ์ ์ถ๋ก / ๋จ์ธ / ๊ฐ๋ (0) | 2024.04.24 |
[TS] ํ์ ์คํฌ๋ฆฝํธ - ์ ๋ค๋ฆญ, ํ๋ก๋ฏธ์ค (0) | 2024.04.24 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๊ฒฝ๊ณผ ์๊ฐ ํ์ / UTC / ISO 8601
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๊ฒฝ๊ณผ ์๊ฐ ํ์ / UTC / ISO 8601
2024.04.25 -
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ค ์ซ์, ๋ฐ์ดํฐ ์์ฑ ์์
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ค ์ซ์, ๋ฐ์ดํฐ ์์ฑ ์์
2024.04.25 -
[React] Canvas API ๊ธฐ๋ณธ ๋ด์ฉ ์ ๋ฆฌ / ๋ฆฌ์กํธ์์ ์ฌ์ฉ๋ฒ
[React] Canvas API ๊ธฐ๋ณธ ๋ด์ฉ ์ ๋ฆฌ / ๋ฆฌ์กํธ์์ ์ฌ์ฉ๋ฒ
2024.04.24 -
[TS] ํ์ ์คํฌ๋ฆฝํธ - ํ์ ์ถ๋ก / ๋จ์ธ / ๊ฐ๋
[TS] ํ์ ์คํฌ๋ฆฝํธ - ํ์ ์ถ๋ก / ๋จ์ธ / ๊ฐ๋
2024.04.24