8

editTextで指定した2枚の写真を撮り、両方の画像の各ピクセルの色を比較して、違いを含む新しい写真(ビットマップ)(SDカードに保存できます)を作成するアプリを作成しようとしています。 2枚のオリジナル写真。

この新しいビットマップの作成に問題があります。どうすれば目標を達成できますか?これを行う方法がよくわかりません。最初に新しいビットマップを作成してから書き込みますか、それとも最初に違いを取得してからビットマップを描画しますか?写真は約になります。300x300ピクセル。

4

2 に答える 2

20

このコードは私の頭から離れており、テストされていませんが、正しい軌道に乗るはずです。

final int w1 = b1.getWidth();
final int w2 = b2.getWidth();
final int h1 = b1.getHeight();
final int h2 = b2.getHeight();
final int w = Math.max(w1, w2);
final int h = Math.max(h2, h2);

Bitmap compare = Bitmap.createBitmap(w, h, Config.ARGB_8888);

int color1, color2, a, r, g, b;

for (int x = 0; x < w; x++) {
    for (int y = 0; y < h; y++) {
        if (x < w1 && y < h1) {
            color1 = b1.getPixel(x, y);
        } else {
            color1 = Color.BLACK;
        }
        if (x < w2 && y < h2) {
            color2 = b2.getPixel(x, y);
        } else {
            color2 = Color.BLACK;
        }
        a = Math.abs(Color.alpha(color1) - Color.alpha(color2));
        r = Math.abs(Color.red(color1) - Color.red(color2));
        g = Math.abs(Color.green(color1) - Color.green(color2));
        b = Math.abs(Color.blue(color1) - Color.blue(color1));

        compare.setPixel(x, y, Color.argb(a, r, g, b));
    }
}
b1.recycle();
b2.recycle();
于 2012-04-16T20:07:29.687 に答える
0

最初にビットマップを作成して各ピクセル間の差を計算しますが、最初に差を計算してからBitmap.copyPixelsを使用することを歓迎しますが、最初の方法の方が理解しやすいと思います。次に例を示します。

// Load the two bitmaps
Bitmap input1 = BitmapFactory.decodeFile(/*first input filename*/);
Bitmap input2 = BitmapFactory.decodeFile(/*second input filename*/);
// Create a new bitmap. Note you'll need to handle the case when the two input
// bitmaps are not the same size. For this example I'm assuming both are the 
// same size
Bitmap differenceBitmap = Bitmap.createBitmap(input1.getWidth(), 
    input1.getHeight(), Bitmap.Config.ARGB_8888);
// Iterate through each pixel in the difference bitmap
for(int x = 0; x < /*bitmap width*/; x++)
{
    for(int y = 0; y < /*bitmap height*/; y++)
    {
        int color1 = input1.getPixel(x, y);
        int color2 = input2.getPixel(x, y);
        int difference = // Compute the difference between pixels here
        // Set the color of the pixel in the difference bitmap
        differenceBitmap.setPixel(x, y, difference);
    }
}
于 2012-04-16T20:01:36.627 に答える