0

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

有什么解决办法吗?谢谢!

4

2 回答 2

3

您可以通过以下方式使用 Array 方法.call()

alert([].every.call(DATA, function(v) { return v === 255; }));

它不像你写的那样工作,因为.every()Uint8ClampedArray 原型上没有。

于 2012-08-17T16:28:37.227 回答
2

您可以使用可以从原型中获取Uint8ClampedArrayevery()函数来扩展Array原型;那么您的代码将正常工作。

Uint8ClampedArray.prototype.every = Array.prototype.every;

I guess this is the easiest way to do it, but note that it will break the for ... in loop (which shouldn't be used to iterate over arrays anyway...).

于 2012-08-17T16:29:02.167 回答