2012-04-16 15 views
7

Estoy tratando de hacer una aplicación que tomará dos imágenes que especifiques mediante editText, comparará los colores de cada píxel en ambas imágenes y creará una nueva imagen (mapa de bits) (que puede guardar en la tarjeta sd) que contiene las diferencias entre las dos imágenes originales.Crear un nuevo mapa de bits y dibujar nuevos píxeles en él

Tengo un problema al crear este nuevo mapa de bits. ¿Cómo puedo lograr mi objetivo? Realmente no sé cómo hacer esto, ¿primero creo el nuevo mapa de bits y luego escribo en él, o obtengo primero las diferencias y luego dibujo un mapa de bits a partir de eso? Las imágenes serán de aprox. 300x300 px.

Respuesta

14

este código está fuera de mi cabeza y aún no ha sido probado, pero debería llevarlo por el camino correcto.

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

Primero crearía el mapa de bits y calcularía las diferencias entre cada píxel, pero puede calcular primero las diferencias y luego usar Bitmap.copyPixels, pero creo que es más fácil de entender de la primera manera. Aquí hay un ejemplo:

// 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); 
    } 
} 
Cuestiones relacionadas