2012-04-14 21 views
1

私はいくつかの透明なピクセルでビットマップを得て、残りは主に黒です(いくつかの黒いピクセルはおそらく半透明のピクセルを持ちます)。Androidで、黒いピクセルのビットマップを別の色に変換するにはどうすればよいですか?

これらのビットマップを再利用する必要があり、実行時にこのビットマップから基本的にマスクを作成し、別の色のブロック(赤、緑など)結果は同じイメージですが、赤色です(半透明の黒のピクセルは半透明の赤のピクセルに変わります)。

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

+0

関連する質問http://stackoverflow.com/questions/9856421/java-how-to-tint-this-png-programmatically/9856551#9856551 – Ozzy

答えて

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方法や、より好ましい、ネイティブ処理を使用する必要があります。

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()); 

    } 
関連する問題