8

我有在我的应用程序中显示的图像。它们是从网上下载的。这些图像是几乎白色背景上的物体图片。我希望这个背景是白色的(#FFFFFF)。我想,如果我查看像素 0,0(应该始终为灰白色),我可以获得颜色值并将图像中具有该值的每个像素替换为白色。

之前有人问过这个问题,答案似乎是这样的:

int intOldColor = bmpOldBitmap.getPixel(0,0);

Bitmap bmpNewBitmap = Bitmap.createBitmap(bmpOldBitmap.getWidth(), bmpOldBitmap.getHeight(), Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpNewBitmap);
Paint paint = new Paint();

ColorFilter filter = new LightingColorFilter(intOldColor, Color.WHITE);
paint.setColorFilter(filter);
c.drawBitmap(bmpOriginal, 0, 0, paint);

但是,这是行不通的。

运行此代码后,整个图像似乎是我想要删除的颜色。如在,整个图像现在是 1 纯色。

我还希望不必遍历整个图像中的每个像素。

有任何想法吗?

4

1 回答 1

16

这是我为您创建的一种方法,用于为您想要的颜色替换特定颜色。请注意,所有像素都将在位图上进行扫描,只有相等的像素才会被替换为您想要的像素。

     private Bitmap changeColor(Bitmap src, int colorToReplace, int colorThatWillReplace) {
        int width = src.getWidth();
        int height = src.getHeight();
        int[] pixels = new int[width * height];
        // get pixel array from source
        src.getPixels(pixels, 0, width, 0, 0, width, height);

        Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());

        int A, R, G, B;
        int pixel;

         // iteration through pixels
        for (int y = 0; y < height; ++y) {
            for (int x = 0; x < width; ++x) {
                // get current index in 2D-matrix
                int index = y * width + x;
                pixel = pixels[index];
                if(pixel == colorToReplace){
                    //change A-RGB individually
                    A = Color.alpha(colorThatWillReplace);
                    R = Color.red(colorThatWillReplace);
                    G = Color.green(colorThatWillReplace);
                    B = Color.blue(colorThatWillReplace);
                    pixels[index] = Color.argb(A,R,G,B); 
                    /*or change the whole color
                    pixels[index] = colorThatWillReplace;*/
                }
            }
        }
        bmOut.setPixels(pixels, 0, width, 0, 0, width, height);
        return bmOut;
    }

我希望这有帮助:)

于 2013-09-17T21:33:55.533 回答