我想在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
?
答案 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);
}
}
}
}
按预期工作。