Context2D.putImageData不起作用

时间:2015-02-24 16:37:50

标签: qt canvas qml

我想在QtQuick Canvas上推送像素

import QtQuick 2.4
import QtQuick.Window 2.1
import QtQuick.Controls 1.2

ApplicationWindow {
    Canvas {
        id: canvas
        width: 500
        height: 500
        Component.onCompleted:loadImage('kde.png');
        onImageLoaded:requestPaint();
        onPaint:{
            var ctx = getContext("2d");
            if (canvas.isImageLoaded('kde.png')) {
                var im = ctx.createImageData('kde.png');
                im.data[3] = 128;
                ctx.putImageData(im, 0, 0);
            }
        }
    }
}

但没有任何反应,画布保持空白。

问题不在于代码执行或图片加载,因为console.log内的if有效,而检查im.data内容则表明它包含数据。问题似乎是putImageData什么也没做。难道我做错了什么?有没有办法调试putImageData

1 个答案:

答案 0 :(得分:2)

我无法弄清楚原因,但似乎Context2D.putImageData()不是正确的工具,应该使用Context2D.drawImage()

import QtQuick 2.4
import QtQuick.Window 2.1
import QtQuick.Controls 1.2

ApplicationWindow {
    Canvas {
        id: canvas
        width: 500
        height: 500
        Component.onCompleted:loadImage('kde.png');
        onImageLoaded:requestPaint();
        onPaint:{
            var ctx = getContext("2d");
            if (canvas.isImageLoaded('kde.png')) {
                var im = ctx.createImageData('kde.png');
                im.data[3] = 128;
                ctx.drawImage(im, 0, 0);
            }
        }
    }
}

按预期工作。

相关问题