8

アプリに表示する画像があります。それらは Web からダウンロードされます。これらの画像は、ほぼ白い背景上のオブジェクトの写真です。この背景を白(#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 に答える