Java tutorial
//package com.java2s; //License from project: Open Source License import android.graphics.Bitmap; import android.graphics.Color; public class Main { /** * Replaces colors in a bitmap that are not farther away from a specific color than a given * threshold. * * @param srcBitmap The source bitmap to scan. * @param mutateSrc Indicates whether to mutate srcBitmap or to produce a new one. * @param keepCr The red color to keep * @param keepCg The green color to keep * @param keepCb The blue color to keep * @param replaceColor The color to replace mismatched colors with * @param distance The distance threshold. * @param simpleBG Whether the bitmap has a simple background * @return Bitmap with replaced colors */ private static Bitmap replaceColors(Bitmap srcBitmap, boolean mutateSrc, int keepCr, int keepCg, int keepCb, int replaceColor, int distance, boolean simpleBG) { int[] allpixels = new int[srcBitmap.getHeight() * srcBitmap.getWidth()]; srcBitmap.getPixels(allpixels, 0, srcBitmap.getWidth(), 0, 0, srcBitmap.getWidth(), srcBitmap.getHeight()); int bgColor = replaceColor; int distanceSq = distance * distance; if (simpleBG) { bgColor = allpixels[0]; } for (int i = 0; i < allpixels.length; i++) { /* Avoid unnecessary math for obviously background color. This removes most of the math * for candy, HP and name bitmaps. */ if (allpixels[i] == bgColor) { allpixels[i] = replaceColor; continue; } int rDiff = keepCr - Color.red(allpixels[i]); int gDiff = keepCg - Color.green(allpixels[i]); int bDiff = keepCb - Color.blue(allpixels[i]); int dSq = rDiff * rDiff + gDiff * gDiff + bDiff * bDiff; if (dSq > distanceSq) { allpixels[i] = replaceColor; } } Bitmap dstBitmap; if (mutateSrc) { dstBitmap = srcBitmap; } else { dstBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig()); } dstBitmap.setPixels(allpixels, 0, srcBitmap.getWidth(), 0, 0, srcBitmap.getWidth(), srcBitmap.getHeight()); return dstBitmap; } }