How do I subtract one bitmap image from another in Android. Please help with the code for the same
Asked
Active
Viewed 1,516 times
2
-
Refer this link http://stackoverflow.com/questions/15105462/how-to-subtract-one-frame-from-another-using-opencv-in-android – suresh Feb 05 '14 at 08:24
-
Use PorterDuffModes in Android. Have a look at [link](http://softwyer.wordpress.com/2012/01/21/1009/) – BlueSword Feb 05 '14 at 08:43
-
Can we do anything other than OpenCV? – user3259851 Feb 05 '14 at 09:23
1 Answers
0
Though it's too late, I am posting the answer for others who may end up here searching for a way to subtract images as I ended up here.
You can use Bitmps class' getPixel() to get value of color at each point in Image. Once you get this values for 2 bitmaps, you can subtract the ARGB values to get the resultant Image.
Following is a code snippet
Bitmap image1 = BitmapFactory.decodeFile(imgFile1.getAbsolutePath());
Bitmap image2 = BitmapFactory.decodeFile(imgFile2.getAbsolutePath());
Bitmap image3 = Bitmap.createBitmap(image1.getWidth(), image1.getHeight(), Config.ARGB_8888);
for(int x = 0; x < image1.getWidth(); x++)
for(int y = 0; y < image1.getHeight(); y++) {
int argb1 = image1.getPixel(x, y);
int argb2 = image2.getPixel(x, y);
//int a1 = (argb1 >> 24) & 0xFF;
int r1 = (argb1 >> 16) & 0xFF;
int g1 = (argb1 >> 8) & 0xFF;
int b1 = argb1 & 0xFF;
//int a2 = (argb2 >> 24) & 0xFF;
int r2 = (argb2 >> 16) & 0xFF;
int g2 = (argb2 >> 8) & 0xFF;
int b2 = argb2 & 0xFF;
//int aDiff = Math.abs(a2 - a1);
int rDiff = Math.abs(r2 - r1);
int gDiff = Math.abs(g2 - g1);
int bDiff = Math.abs(b2 - b1);
int diff =
(255 << 24) | (rDiff << 16) | (gDiff << 8) | bDiff;
image3.setPixel(x, y, diff);
}
try (FileOutputStream out = new FileOutputStream(filename)) {
image3.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
// PNG is a lossless format, the compression factor (100) is ignored
} catch (IOException e) {
e.printStackTrace();
}
Credits
https://stackoverflow.com/a/21806219/9640177
https://stackoverflow.com/a/16804467/9640177

Mayank Kumar Chaudhari
- 16,027
- 10
- 55
- 122