当我从画布获取getImageData()时,我得到一个ImageData对象,它带有一个Data子对象,它是一个钳位数组。我想检查我得到的每个像素是否是白色(而不是透明)。换句话说,我想检查数据对象中的每个值是否等于255.显而易见的代码如下:
if (data.every(function(value) {return value == 255})) {
//Do something
}
但由于某种原因,它不适用于钳位数组,如下面的最小代码所示:
var DATA = new Uint8ClampedArray(3);
//var DATA = new Array
DATA[0] = 255
DATA[1] = 255
DATA[2] = 255
DATA[3] = 255
alert(DATA.every(function(value) {return value == 255}))
任何解决方案?谢谢!
答案 0 :(得分:3)
您可以通过.call()
使用Array方法:
alert([].every.call(DATA, function(v) { return v === 255; }));
它不像您编写的那样工作,因为Uint8ClampedArray原型上没有.every()
。
答案 1 :(得分:2)
您可以使用Uint8ClampedArray
函数扩展every()
的原型,该函数可以从Array
原型中获取;那么你的代码就可以了。
Uint8ClampedArray.prototype.every = Array.prototype.every;
我想这是最容易实现的方法,但请注意它会打破for ... in
循环(不管怎样都不会用于迭代数组......)。