2011-06-21 14 views
0

これを実行する最適な方法は何ですか。私は長さの高さ*幅の配列を持っています。私は単純にビットマップをループインデックスに基づいて配列に各ピクセルを設定するループですか?ありがとうビットマップを整数配列に格納する

[更新] ビットマップに魚眼レンズの歪みを配置するアプリです。これは大規模なGCのオーバーヘッド

for (int j=0;j<dst.getHeight();j++) { 
     for (int i=0;i<dst.getWidth();i++) { 
      origPixel= input.getPixel(i,j); 
      getRadXStart = System.currentTimeMillis(); 
      float x = getRadialX((float)j,(float)i,centerX,centerY,k); 
      float y = getRadialY((float)j,(float)i,centerX,centerY,k); 
      sampleImage(input,x,y); 

      color = ((s[1]&0x0ff)<<16)|((s[2]&0x0ff)<<8)|(s[3]&0x0ff); 
     // System.out.print(i+" "+j+" \\"); 

      //if(Math.sqrt(Math.pow(i - centerX, 2) + (Math.pow(j - centerY, 2))) <= 150){ 
      if (Math.pow(i - centerX, 2) + (Math.pow(j - centerY, 2)) <= 22500) { 
       // dst.setPixel(i, j, color); 
       arr[i]=color; 
      } else { 
       //dst.setPixel(i,j,origPixel); 
       arr[i]=origPixel; 
      } 
     } 
    } 

Bitmap dst2 = Bitmap.createBitmap(arr,width,height,input.getConfig()); 
     return dst2; 
+0

私たちを示すサンプルコードは何ですか?ピクセルをどこに設定していますか? –

+0

@ted hopp hi、更新された投稿 – turtleboy

答えて

0

あなたがメソッドgetPixels(...) on Bitmapを試してみましたが付属していますように私はBitmap.setPixel()を呼び出すことではなく、アレイ内の画素データを格納しようとしていますか?

+0

こんにちは私はちょうど私の更新を逃したと思います。ビットマップからのset/getPixelは大きなGCオーバーヘッドを伴います。画像を変換するには約50秒かかります。これはgcが実行されたためです。私はtraceviewを実行して、ビットマップセット/ getPixelを回避する必要がある – turtleboy

+0

私はgetPixel(...)のメソッドについて話していない、私はgetPixels(...)( 's'に注意してください)について話しているすべてのピクセルカラーデータをint []にロードします。これはあなたの後ではありませんか?このGCオーバーヘッドはどこにありますか? –

+0

ああ、あなたのポイントを見逃しています。はい、ビットマップクラスへの呼び出しがあるので、私はそれを試してみます。ありがとう – turtleboy

0

これを埋めるには、ビットマップをループして各ピクセルを設定する必要があります。つまり、パフォーマンスが大幅に向上するかどうかわかりません。

+0

@haphazardこんにちは、なぜ3配列ですか? int値として格納された各ピクセルの色ではありませんか? – turtleboy

+0

私の間違い - 私は自分の答えを更新しました。 – Haphazard

+0

@haphazardメソッドsamleImageは画像を歪ませ、ビットマップセッター/ゲッターにたくさんの呼び出しをしません。これはGCに影響するこれらの呼び出しです。ビットマップが表示されているときからアプリはうまく動作します。ビットマップの残りの部分が黒で表示されているのは、一番上の行のピクセルだけです。私はそれがどのように私は配列または何かに入力するか、またはループのprobと思う – turtleboy