2012-04-16 10 views
7

Próbuję utworzyć aplikację, która wykona dwa obrazy określone za pomocą edytowalnego tekstu, porówna kolory każdego piksela na obu obrazach i utworzy nowe zdjęcie (bitmapę) (można zapisać na karcie SD) zawierające różnice między dwoma oryginalnymi zdjęciami.Utwórz nową bitmapę i narysuj w niej nowe piksele.

Mam problem z utworzeniem tej nowej bitmapy. Jak mogę osiągnąć mój cel? Naprawdę nie wiem, jak to zrobić, czy najpierw utworzę nową bitmapę, a potem napiszę, czy najpierw dostaję różnice, a potem narysuję z tego bitmapę? Zdjęcia będą około. 300 x 300 pikseli.

Odpowiedz

14

Ten kod jest po prostu z mojej głowy i niesprawdzony, ale powinien cię doprowadzić na właściwą drogę.

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

Najpierw utworzę bitmapę i obliczy różnice między poszczególnymi pikselami, ale najpierw możesz obliczyć różnice, a potem użyć Bitmap.copyPixels, ale myślę, że łatwiej jest zrozumieć pierwszy sposób. Oto przykład:

// 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); 
    } 
} 
Powiązane problemy