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

%次のような(モジュラス)演算子を利用することで、計算を少し減らすことができます。

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]];

    }
}​

imageHeightもちろん、との値を考え出す必要がありますimageWidth

于 2012-05-30T01:17:48.333 に答える