0

私はアンドロイドでビットマップを通過し、各ピクセルの色を取得して、特定の値を持っている場合、つまり茶色の場合はカウントしたいと考えています。

次のコードを使用します。コードは機能しますが、画像内のピクセル数が多いため、非常に遅くなります。もちろん、正しい結果を得るにはこれが必要です。

for(int i =  1; i <= 100; i++){
    for(int j = 1; j <= 100; j++) {
        int pixel =  bitmap.getPixel(i,j);

        R1 = Color.red(pixel);
        G1 = Color.green(pixel);
        B1 = Color.blue(pixel);

        if((R1 == 155) && (G1 == 155) && (B1 == 155)) {
            countthecolor = countthecolor + 1;
        }
    }    
}          
4

2 に答える 2

2

getPixelsの大きな配列を返す whichを使用してみることができますlength = bitmap.width * bitmap.height

次に、この配列をループして操作を実行できます。これは少し高速になりますが、ビットマップが既にあり、メモリ内にこの配列があるため、メモリを管理する必要があります。そのため、必要がなくなった場合は、ビットマップをリサイクルすることをお勧めします。

int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), x, y, myBitmap.getHeight(), myBitmap.getWidth());

ビット演算を使用してループをさらに最適化し、個々の RGB 値を取得できます (アルファがある場合とない場合があることに注意してください)。

            Alpha = (pixel & 0xff000000)  
            R1 = (pixel >> 16) & 0xff;
            G1 = (pixel >> 8) & 0xff;
            B1 = (pixel & 0xff);

これを見てみたいかもしれません!

于 2013-10-18T16:46:01.187 に答える
0

getPixel各ピクセルごとに呼び出すと、しばらく時間がかかります。getPixels一度にピクセルの行で計算を実行できます。

于 2013-10-18T16:30:19.547 に答える