qt - Context2D.putImageData 不起作用

标签 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);
            }
        }
    }
}

但什么也没发生, Canvas 保持空白。

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

最佳答案

我不明白为什么,但似乎 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);
            }
        }
    }
}

按预期工作。

关于qt - Context2D.putImageData 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28701281/

相关文章:

qt - 如何使用 openssl 在 Qt 中生成 key ?

c++ - 改变QTabWidget的背景颜色

c++ - 将 Qt 属性枚举值打印为键字符串

qt - QML:是否可以更改鼠标区域的长持续时间

qt - 使用 qml 创建 Accordion 控件的正确方法

linux - Qt,如何将图标添加到tabWidget 标题?

c++ - 子线程完成后更改 GUI - QT

javascript - Canvas 坐标溢出?

javascript - 圆不会在 Canvas 上绘制

javascript - HTML5 Canvas : Get Event when drawing is finished