如何检查钳位数组中的每个值

时间:2012-08-17 16:20:52

标签: javascript html5-canvas

当我从画布获取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}))

任何解决方案?谢谢!

2 个答案:

答案 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循环(不管怎样都不会用于迭代数组......)。