2012-04-16 34 views
7

Tôi đang cố gắng tạo một ứng dụng sẽ chụp hai ảnh bạn chỉ định qua editText, so sánh màu của mỗi pixel trên cả hai ảnh và tạo ảnh mới (bitmap) (bạn có thể lưu vào thẻ sd) có chứa sự khác biệt giữa hai hình ảnh gốc.Tạo bitmap mới và vẽ các pixel mới vào đó

Tôi gặp sự cố khi tạo bitmap mới này. Làm thế nào tôi có thể đạt được mục tiêu của mình? Tôi không thực sự biết làm thế nào để làm điều này, tôi tạo bitmap mới đầu tiên và sau đó viết vào nó, hoặc để tôi có được sự khác biệt đầu tiên và sau đó rút ra một bitmap từ đó? Những hình ảnh sẽ được khoảng. 300x300 px.

Trả lời

14

mã này chỉ nằm ngoài đầu của tôi và chưa được kiểm tra nhưng nó sẽ giúp bạn đi đúng hướng.

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

Tôi sẽ tạo bitmap trước và tính toán sự khác biệt giữa mỗi pixel, nhưng bạn có thể tính toán sự khác biệt trước và sau đó sử dụng Bitmap.copyPixels, nhưng tôi nghĩ dễ hiểu hơn cách đầu tiên. Dưới đây là ví dụ:

// 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); 
    } 
} 
Các vấn đề liên quan