2012-01-20 9 views
2

私は配列に各ピクセルをロードしているビットマップを持っています。その後、各配列のピクセルデータを調べて、色が赤であるかどうかを確認し、BLACKに変更します。だから1024x1024の画像であれば、私は1048576の長さの配列を調べなければなりません。これを処理するためのより速い方法がありますか?パフォーマンスを向上させるためのアドバイスは歓迎します。私は基本的にイメージの色をチェックし、それを変更する必要があります。以下は私のコードサンプルです。java androidで配列を処理する方が速いのですか?

int[] allpixels = new int[myBitmap.getHeight() * myBitmap.getWidth()]; 

myBitmap.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, 
        myBitmap.getWidth(), myBitmap.getHeight()); 

for (int i = 0; i < myBitmap.getHeight() * myBitmap.getWidth(); i++) { 
    if (allpixels[i] == fromColor) { 
     allpixels[i] = toColor; 
    } 
} 
Bitmap bitmapCopy = myBitmap.copy(myBitmap.getConfig(), true); 
bitmapCopy.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, 
        myBitmap.getWidth(), myBitmap.getHeight()); 
+0

ここでは複数のスレッドを使用できるようです。 –

+1

はあなたのケースのように聞こえるhttp://stackoverflow.com/questions/4251027/faster-way-to-set-a-png-bitmap-color-instead-of-pixel-by-pixel –

+0

@Sergey Bennerありがとうございました。これは私のために働いた。 – Vinodtiru

答えて

1

forループの比較文では、高さと幅が得られ、毎回増えています。キャッシュすることができます。おそらくあなたには少しのパフォーマンス向上があるはずですが、それ以外の場合は、アルゴリズムに必要な作業が数多くあります。あなたはそれについて何かできることはありません。上記のコメントに示唆されているとおり、マルチスレッドですが、複数のコア/プロセッサがあるという保証はありません。パフォーマンスがそれほど重要である場合は、ICSが必要な場合にRenderScriptを使用してそのことを検討することができます。詳細はpost on image processingを参照してください。

実際に別の方法として、setColorFilterを使用することをお勧めします。元の色のマスクを取得し、マスクを新しい色で再適用するには、2つのアプリケーションが必要になる場合があります。

関連する問題