2012-03-20 8 views
0

私は実際に配列を作ることと混乱しています。それは少し混乱していますが、私は何をしようとしているのかに私が唯一のやり方でいると信じています。イメージデータを取得する多次元配列

ここで私の考えは、各画像をデータの配列にリンクできるように、getImageDataを配列に格納することです。

これは私が私の配列を作成する方法である:

var listObj = { 
    id: uid, 
    extra: [ 
      ctx2.getImageData(abposx,abposy,imgwidth,imgheight) 
     ] 

    }; 
pixeld.push(listObj); 

だから今のuidを見つけるために、アレイ「pixeld」を介して実行しようとしているイムしかし、私は構文はどうあるべきかを知りません....これは私が試したものです:

for (j = (pixeld.length-1); j > -1; --j){ 
     if(pixeld[j].extra.data[3] !==0){ //line 220 
      matches.push(pixeld[j].id); 
     } 

    } 

問題は、私はこのエラーを取得する次のとおりです。

Uncaught TypeError: Cannot read property '3' of undefined on line 220 

私は22であるラインマークしていますforループ内の0。

私の間違いは何ですか?

+0

'pixel [j] .data [3]が何を生産すると思いますか? –

+0

この例のような整数値は、http://www.paste.to/MzYxNDc1を示します。その例の特定のピクセルに関連しています。mineはデータの配列であるか、=/ – Sir

答えて

1

だからあなたの構造は、次のようになります。

var pixeld = []; // an Array 
var listObj = {}; //an Object 

listObj = { // literal notation 
    id : uid, 
    extra : [ ctx2.getImageData(abposx,abposy,imgwidth,imgheight) ] 
} 

今の質問は次のとおりです。帰国ctx.2.getImageData()とは何ですか?それを明確にする必要があります。

pixeld[j].extraまではすべて問題ありませんが、data-プロパティはありません。 getImageData()が本当に配列を返す場合、あなたは次のようにアクセスできるようになります:

pixeld[j].extra[3] 
+0

である必要があります。getImageDataは、このhttp://から作業したキャンバスの特定の領域に関する情報の配列を返します。 /www.paste.to/MzYxNDc1 – Sir

+0

残念ながら、そこにあるコードから判断することはできません。次のようにしてみてください: 'pixeld [j] .extra [3]'が動作しない場合は、 'console.log(pixeld)'を実行してオブジェクトを調べてみてください。これはあなたに構造についてのヒントを与えるはずです。 (私はFFでfirebugのようなwebdevelopertoolsを持っていると仮定します) – Christoph

+0

別の質問:あなたが必要とするものがidなら、あなたは 'pixeld [j] .extra.data [3]!== 0 'で何をしたいですか?おそらくif条件を省略することができます。 – Christoph

1

問題は、あなたがオブジェクトとして.extraを参照しようとしているということですが、あなたはそれが単一の値を持つ配列として宣言してい内部(何ctx2.getImageDataが返す)。

[]ctx2.getImageDataファンクションコールを囲むだけで、簡単に修正できます。