因此 createImageRegion 方法会忽略所有具有少量 alpha/opacity 的像素。
您如何制作此功能,以便不透明度为 0.5 或其他像素的像素也将被计算为命中检测?
我研究了 KineticJS。一个 colorKey 被添加到一个 hitregion,但它把键转换为一个没有 alpha 的十六进制键。我想不出一种方法来完成这项工作。
非常感谢您的帮助!
这就是魔法发生的地方。但我不明白我怎么能包含任何类型的透明度但 0 的像素
createImageHitRegion: function (callback) {
var canvas = new Kinetic.Canvas(this.attrs.width, this.attrs.height);
var context = canvas.getContext();
context.drawImage(this.attrs.image, 0, 0);
try {
var imageData = context.getImageData(0, 0, canvas.getWidth(), canvas.getHeight());
var data = imageData.data;
var rgbColorKey = Kinetic.Type._hexToRgb(this.colorKey);
// replace non transparent pixels with color key
for (var i = 0, n = data.length; i < n; i += 4) {
data[i] = rgbColorKey.r;
data[i + 1] = rgbColorKey.g;
data[i + 2] = rgbColorKey.b;
// i+3 is alpha (the fourth element)
}
var that = this;
Kinetic.Type._getImage(imageData, function (imageObj) {
that.imageHitRegion = imageObj;
if (callback) {
callback();
}
});
}
catch (e) {
Kinetic.Global.warn('Unable to create image hit region. ' + e.message);
}
}
当我包括: data[i + 3] = 255 (rgbColorKey.a) 不存在时,所有图像事件都不再起作用