1

いくつかの透明なピクセルを含むビットマップがあり、残りは主に黒です (一部の黒いピクセルには、半透明のピクセルがいくつか含まれている可能性があります)。

これらのビットマップを再利用する必要があり、基本的に実行時にこのビットマップからマスクを作成し、別の色 (赤、緑など) のブロックとブレンドして、最終結果が同じになるようにしたいと考えています。画像ですが、色は赤です (半透明の黒のピクセルだったピクセルは、半透明の赤のピクセルに変わります)。

あらゆる種類のカラー フィルターと xfermodes を試しましたが、わかりませんでした。助けてください!

4

2 に答える 2

2

高速が必要ない場合は、手動でピクセルをブレンドすることで簡単なソリューションを使用できます。

final Bitmap bmp = /* there your bitmap */;

int w = bmp.getWidth();
int h = bmp.getHeight();

for (int x = 0; x < w; x++) {
  for (int y = 0; y < h; y++) {
    int color = bmp.getPixel(x, y);

    // Shift your alpha component value to the red component's.
    color = (color << 24) & 0xFF000000;

    bmp.setPixel(x, y, color);
  }
}

より効果的な処理が必要な場合は、(少なくとも) getPixelsメソッドを使用するか、より望ましいネイティブ処理を使用する必要があります。

于 2012-04-14T23:51:02.723 に答える
0
 public void changeColor(Bitmap myBitmap) {

        int [] allpixels = new int [myBitmap.getHeight()*myBitmap.getWidth()];

        myBitmap.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());

        for(int i = 0; i < allpixels.length; i++)
        {
            if(allpixels[i] == Color.BLACK)
            {
                allpixels[i] = Color.RED;
            }
        }

        myBitmap.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());

    }
于 2016-05-14T09:46:05.700 に答える