【问题标题】:How to detect that the AlphaMaskFilter is completely gone in easeljs/createjs如何检测 AlphaMaskFilter 在 easeljs/createjs 中完全消失
【发布时间】:2017-04-08 04:11:04
【问题描述】:

我正在做一个基于 AlphaMaskFilter 示例的小划痕/显示游戏: http://createjs.com/demos/easeljs/AlphaMaskReveal.html

我想检测遮罩是否完全消失,或者使用阈值(例如 90% 的划痕)。

我阅读了有关 AlphaMaskFilter、形状和图形对象的文档,但我不确定如何实现这一点。

我什至不确定我是否可以访问像素信息并检查 alpha 通道以检测它,但即便如此,我想知道我是否会出现性能问题。

欢迎任何帮助,谢谢。

**** 编辑 **** 添加到接受的答案 ****

所以,我能够使用 AlphaMapFilter 获得透明度百分比(感谢 Lanny)。 AlphaMapFilter 为您提供到所有像素的 Alpha 通道的映射。 这是一个对我有用的小示例代码:

        // mShapeToScratch is a createjs Shape. like in the http://createjs.com/demos/easeljs/AlphaMaskReveal.html example
        var alphaMaskFilter = new createjs.AlphaMapFilter(mShapeToScratch.cacheCanvas);
        var canvas = alphaMaskFilter.alphaMap;
        var ctx = canvas.getContext("2d");
        var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
        var alphaData = imgData.data;
        var pixelTotal = rect.h*rect.w;
        var transparentPixel = 0;

        // rect.h is the height of the image and rect.w is the width not shown in the example
        for (var y = 0; y < rect.h; ++y)
        {
          for (var x=0; x < rect.w; ++x)
          {
            var pixelIdx = (y*rect.w + x);

            if(alphaData[pixelIdx] > 128) // transparent will be 255.
            {
                transparentPixel++;
            }
        }

        console.log("transparent % = " + transparentPixel/pixelTotal);

此示例检查所有像素,但按照 Lanny 的建议,每隔 X 像素检查一个以加快检查速度非常容易。

【问题讨论】:

    标签: html createjs easeljs


    【解决方案1】:

    alpha 蒙版使用画布复合操作,而不是像素访问,因此如果没有一些完全自定义的方法,就没有很好的方法来做到这一点。

    迭代像素(以 AlphaMapFilter 为例)会起作用 - 但可能会相当慢。也许每 4、10 或 25 个像素检查一次会加快速度。

    干杯。

    【讨论】:

    • 感谢 Lanny,如果我理解正确,您是说 A) 没有简单的方法来检测 AlphaMaskFilter 的显示量。 B) 如果我想使用像素检查解决方案,我不能使用 AlphaMaskFilter,我应该使用 AlphaMapFilter。我理解正确吗?
    • 有点。 AlphaMapFilter 使用特定的通道,因此您可以提供压缩的 JPG 作为掩码。您必须制作一个使用 AlphaMapFilter 方法(检查像素)的自定义过滤器,将其更改为检查 alpha,然后实现某种覆盖率算法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多