2

我想比较从 HTML5 画布中检索到的(数量有限的)颜色值。所以我检索并存储我感兴趣的内容ctx.getImageData(x, y, 1, 1).data;

然后我尝试使用Array.prototype.compare 来自:如何比较 JavaScript 中的数组?经过:

// add the same compare method to Uint8ClampedArray
Uint8ClampedArray.prototype.compare=Array.prototype.compare;

这在最近的 FireFox 和 Chrome 上运行良好,但我很快发现并非所有浏览器都返回 Uint8ClampedArray 类型的对象。IE 似乎使用 CanvasPixelArray 的对象,Safari 似乎使用简单的 4 值数组

我是否必须自己处理这些差异,或者是否有可靠的通用方法(普通 JS 或 jQuery)来比较 ctx.getImageData() 检索到的两个此类值,适用于所有浏览器?

4

1 回答 1

1

您可以(可能?)像这样使用数组比较方法:

var comparisonResult = [].compare.call(yourPixels, colors);

该代码从数组实例中找到“比较”方法,并使用您的像素数组作为this值和另一个数组(您的颜色)作为第一个参数来调用它。

这将是同一件事:

var comparisonResult = Array.prototype.compare.call(yourPixels, colors);

但它打字更多,我很懒。无论如何,只要像素“看起来”像一个数组(它们有一个“长度”属性和[]索引工作)就应该适合你。

编辑-我刚刚看了你链接的问题。如果您只需要一个“比较”功能来达到此目的,则无需将其添加到 Array 原型中,因为无论如何您都不会通过这种方式使用它。只需编写一个带有两个参数的比较函数。

于 2013-07-21T14:39:50.410 回答