1

我编写了一种将画布图像数据数组转换为基于多维坐标的数组的方法,如下所示:

parse: function() {
    var x = y = 0;
    var step = 0;
    for(var i = 0; i <= this.imageData.length - 4; i += 4) {
        if(step == this.width) {
            ++ y;
            step = 0;
        }
        this.data[x][y] = [this.imageData[i],
                           this.imageData[i+1],
                           this.imageData[i+2],
                           this.imageData[i+3]];

        ++ x;
        ++ step;
    }
}

我已经在较小的规模(10x10 图像)上对其进行了测试,但是当我移动到更大的图像时,在我的情况下为 800x800,它完全使浏览器(选项卡)崩溃。我可以理解为什么,但是,我想知道是否有更有效的方法来解决这个问题。

有什么想法吗?

4

1 回答 1

2

您可以通过像这样利用%(modulus) 运算符做更少的数学运算:

var floor = Math.floor; // store a reference to Math.floor, anything goes when you have 640,000 iterations 

parse: function(imageHeight, imageWidth) {
    for(var i = 0; i < this.imageData.length; i++) {
        this.data[i % imageWidth][Math.floor(i/imageHeight)] = [this.imageData[i],
                           this.imageData[i+1],
                           this.imageData[i+2],
                           this.imageData[i+3]];

    }
}​

当然,你必须想出 和 的imageHeightimageWidth

于 2012-05-30T01:17:48.333 回答