Create a new bitmap and draw new pixels on it

I am trying to create an application that selects two images that you specify through editText, compare the colors of each pixel with both images and create a new image (bitmap image) (which you can save on the SD card) containing the differences between the two original images.

I had a problem creating this new bitmap. How can I achieve my goal? I really donโ€™t know how to do this, first create a new raster map and then write to it or first get the differences and then draw a raster image? Images will be approx. 300x300 pixels.

+7
source share
2 answers

this code is just out of my head and untested, but it should get you on the right track.

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(); 
+14
source

I would first create a bitmap and calculate the differences between each pixel, but you can calculate the differences first and then use Bitmap.copyPixels, but it seems to me that it is easier to understand the first way. Here is an example:

 // 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); } } 
0
source

All Articles