1

Тема: Обробка пікселів в canvas javascript

Вивчаю js, знайшов потрібне, але не розумію як скористатися drawPixel та drawLine. Виклик drawLine(20, 30, 50, 50, 0, 0, 0) нічого не видає:

Прихований текст
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Про CANVAS</title>
</head>
<body>
    <!-- ВІКНО ДЛЯ ВІДОБРАЖЕННЯ ГРАФІКИ -->
    <canvas id="surface" width="800" height="600"></canvas>
    <script>
        //тут буде весь код
        const ctx = document
            .getElementById('surface')
            .getContext('2d')

        //отримання доступу до масиву пікселів, який будемо змінювати
        //+ вказуємо розміри вікна, в якому малюватимемо
        const imageData = ctx.createImageData(800, 600)

        ctx.beginPath();
        ctx.arc(30, 40, 10, 0, Math.PI*2, true);
        ctx.stroke();

        class Drawer {
            surface = null
            width = 0
            height = 0

            constructor(surface, width, height) {
                this.surface = surface
                this.width = width
                this.height = height
            }
            drawPixel(x, y, r, g, b) {
                const offset = (this.width * y + x) * 4

                this.surface[offset] = r
                this.surface[offset+1] = g
                this.surface[offset+2] = b
                this.surface[offset+3] = 255            
            }
            drawLine(x1, y1, x2, y2, r, g, b) {
                const c1 = y2 - y1
                const c2 = x2 - x1

                const length = Math.sqrt(c1 * c2 + c2 * c2)

                const xStep = c2 / length
                const yStep = c1 / length

                for(let i = 0; i < length; i++) {
                    this.drawPixel(
                        Math.trunc(x1 + xStep * i),
                        Math.trunc(y1 + yStep * i),
                        r, g, b,
                    )
                }
            }
            clearSurface() {
                const surfaceSize = this.width * this.height * 4
                for (let i = 0; i < surfaceSize; i++) {
                    this.surface[i] = 0
                }
            }
        }
        const drawer = new Drawer(
            imageData.data,
            imageData.width,
            imageData.height
        )
        drawLine(20, 30, 50, 50, 0, 0, 0)
    </script>
</body>
</html>

Якщо комусь цікаво, хочу створити аналог людського мислення, де canvas є першим кроком до комп'ютерного зору.