0

我可以像这里一样向图像添加过滤器:

// 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();
        }
    };
4

2 回答 2

1

目前似乎没有任何方法可以做到这一点。我在当前版本的源代码中四处寻找,但找不到任何会删除过滤器的函数调用。

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

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

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

于 2012-11-07T19:27:02.550 回答
-2

轻松使用以下

YOURIMAGEORSHAPE.clearFilter(); 
stage.draw(); // or layer.draw(); depending on your setup 
于 2014-02-03T11:56:11.090 回答