【发布时间】:2014-07-22 18:14:01
【问题描述】:
首先,我有不同形状的图像,我必须为它们重新着色,并且仅当鼠标在形状上时才设置点击区域(用于 onclick 事件)。所以在分别调查问题后,我找到了两种解决方案,但我不知道如何一起使用。
-仅使用形状命中区域,我使用 .cache() 将图像存储在缓存中并在没有透明像素的情况下重绘它。
-为了改变颜色,我迭代 imageData 像素,在 for 循环中一一改变它们。
为了测试,我使用的是原始蓝色图像(.png 格式),我想要正确设置命中区域的红色图像,我也在使用 kinetic-v5.0.2。
这是我的代码。
function makeKineticImage(imageObj){
var dImage = new Kinetic.Shape({
sceneFunc: function (context) {
context.beginPath();
console.log("sceneFunc");
var x = 100;
var y = 100;
context.drawImage(imageObj, x, y, imageObj.width, imageObj.height);
var imageData = context.getImageData(x, y, imageObj.width, imageObj.height);
var data = imageData.data;
//Here i'm changing the color
for (var i = 0; i < data.length; i += 4) {
//var brightness = 0.9 * data[i] + 0 * data[i + 1] + 0 * data[i + 2];
data[i] = 255;
data[i + 1] = 25;
data[i + 2] = 25;
}
context.putImageData(imageData, x, y);
context.rect(x, y, imageObj.width, imageObj.height);
context.closePath();
context.fillStrokeShape(this);
}
});
dImage.on("click", function() {
console.log("Click dImage");
});
layer.add(dImage);
/*dImage.cache({
width: 79,
height: 73,
x: 100,
y: 100
});
dImage.drawHitFromCache();*/
layer.draw();
layer.drawHit();
}
现在我用其他颜色(红色)填充我的形状,但点击区域不适合形状(获取所有图像正方形),但如果我取消注释 .cache() 和 .drawHitFromCache() 我得到我的原始图像(蓝色)仅在形状上具有命中区域。
你能帮帮我吗? 非常感谢。
【问题讨论】:
标签: javascript image canvas kineticjs shape