我正在使用 Kinetic 进行一些图像处理。发生的事情是我裁剪了我的图像,然后通过单击一个按钮,我想让它变成黑白的。由于某种原因,当您首先进行裁剪时,简单的 setFilter 函数在这种情况下不起作用。这是裁剪的代码:
layer.removeChildren();
layer.clear();
image = new Kinetic.Image({
image: canvasImage,
x: (canvasWidth/2-theSelection.w/2),
y: (canvasHeight/2-theSelection.h/2),
width: theSelection.w,
height: theSelection.h,
crop: [theSelection.x, theSelection.y, theSelection.w, theSelection.h],
name: "image_tmp"
});
layer.add(image);
stage.draw();
这是我决定用于应用过滤器的功能:
var imgPixels = ctx.getImageData(xx, yy, imgW, imgH);
for(var y = 0; y < imgPixels.height; y++){
for(var x = 0; x < imgPixels.width; x++){
var i = (y * 4) * imgPixels.width + x * 4;
var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
imgPixels.data[i] = avg;
imgPixels.data[i + 1] = avg;
imgPixels.data[i + 2] = avg;
}
}
ctx.putImageData(imgPixels, xx, yy, 0, 0, imgPixels.width, imgPixels.height);
所以现在我得到了带有过滤器的裁剪图像,但是如果我想继续对图像对象做一些事情,我会得到:
TypeError: a.getType is not a function
我还认为我以前在代码中使用的图像对象现在就像未定义。
因此,例如,我希望在过滤器之后执行 layer.add(image) 并且我希望图像变量是新的黑白变量,而不是旧的变量。
那么有没有人知道问题是什么,或者我怎样才能使新的 imgPixels 与我的图像相同。提前致谢