如何在kineticjs中删除图像过滤器?

时间:2012-11-07 10:05:40

标签: javascript kineticjs

我可以像here这样的图像添加过滤器:

// apply grayscale filter to second image
filteredYoda.applyFilter({
    filter: Kinetic.Filters.Grayscale,
    callback: function() {
        layer.draw();
    }
});

,但我如何删除它并获得初始图像?

更新 解决问题的代码:

    imageCanvas.initailImage = imageCanvas.getImage();
    imageCanvas.disconnect = function () {
        imageCanvas.applyFilter({
            filter: Kinetic.Filters.Grayscale,
            callback: function() {
                //imageCanvas.deviceName += " - Disconnected.";
                stage.get('#deviceLayer')[0].draw();
            }
        });
    };
    imageCanvas.connect = function () {
        if (imageCanvas.hasOwnProperty('initailImage')) {
            imageCanvas.setImage(imageCanvas.initailImage);
            stage.get('#deviceLayer')[0].draw();
        }
    };

2 个答案:

答案 0 :(得分:1)

目前似乎没有办法做到这一点。我在当前版本的源代码中探讨过,我找不到任何会删除过滤器的函数调用。

过滤器本身实际上是对原始图像数据应用一些数学运算的函数,因此一种方法可能是定义自己的过滤器,该过滤器应用逆方程。但是,如果不增加额外的复杂性,可能无法计算原始值。

所以,如果你不想尝试(以及谁会责怪你......),你也可以从同一个来源制作一个新的图像并将其单独存储,以显示为过滤后的图像。这有点令人讨厌,不幸的是克隆方法现在也无法正常工作(你会得到对同一个变量的引用),但这可能是最简单的方法。

最后,当然,您可能更愿意等待实现更多过滤器支持。但是,我无法告诉你何时会发生这种情况。

答案 1 :(得分:-2)

轻松使用以下

YOURIMAGEORSHAPE.clearFilter(); 
stage.draw(); // or layer.draw(); depending on your setup