【发布时间】: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 像素检查一个以加快检查速度非常容易。
【问题讨论】: