2012-04-16 13 views
7

私は、editTextで指定した2つの画像を取得し、両方の画像の各ピクセルの色を比較し、新しい画像(ビットマップ)を作成するアプリケーションを作成しようとしています元の2枚の写真の違いを含むSDカードに保存することができます)。新しいビットマップを作成して新しいピクセルを描画する

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

答えて

14

このコードは、ちょうど私の頭から出て、テストされていないが、それは正しい軌道に乗ってあなたを取得する必要があります。

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(); 
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); 
    } 
} 
関連する問題