Буферы пикселей

Добавлено 7 мая 2022 в 22:41

При работе с Canvas вы можете получать с холста данные о пикселях, чтобы читать или управлять ими. Чтобы прочитать данные изображения, используйте createImageData(sw,sh) или getImageData(sx,sy,sw,sh). Обе функции возвращают объект ImageData с шириной (width), высотой (height) и переменной данных data. Переменная data содержит одномерный массив данных пикселей, полученных в формате RGBA, где каждое значение варьируется в диапазоне от 0 до 255. Чтобы установить пиксели на холсте, вы можете использовать функцию putImageData(imagedata, dx, dy).

Другой способ получить содержимое холста – сохранить данные в изображение. Этого можно добиться с помощью функций save(path) или toDataURL(mimeType) элемента Canvas, вторая из этих функций возвращает URL изображения, который может использоваться для загрузки элементом Image.

import QtQuick

Rectangle {
    width: 240; height: 120
    Canvas {
        id: canvas
        x: 10; y: 10
        width: 100; height: 100
        property real hue: 0.0
        onPaint: {
            var ctx = getContext("2d")
            var x = 10 + Math.random(80)*80
            var y = 10 + Math.random(80)*80
            hue += Math.random()*0.1
            if(hue > 1.0) { hue -= 1 }
            ctx.globalAlpha = 0.7
            ctx.fillStyle = Qt.hsla(hue, 0.5, 0.5, 1.0)
            ctx.beginPath()
            ctx.moveTo(x+5,y)
            ctx.arc(x,y, x/10, 0, 360)
            ctx.closePath()
            ctx.fill()
        }
        MouseArea {
            anchors.fill: parent
            onClicked: {
                var url = canvas.toDataURL('image/png')
                print('image url=', url)
                image.source = url
            }
        }
    }

    Image {
        id: image
        x: 130; y: 10
        width: 100; height: 100
    }

    Timer {
        interval: 1000
        running: true
        triggeredOnStart: true
        repeat: true
        onTriggered: canvas.requestPaint()
    }
}

В нашем маленьком примере мы рисуем на левом холсте каждую секунду маленький кружок. А когда пользователь кликает на область обработки событий мыши, содержимое холста сохраняется и извлекается URL изображения. Затем в правой части интерфейса нашего примера отображается изображение.

Теги

CanvasGUI / Графический интерфейс пользователяQMLQtQtQuickПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.