如何在Android中将黑色像素的位图转换为另一种颜色?

时间:2012-04-14 23:19:29

标签: android colormatrix

我有一个带有透明像素的位图,其余部分主要是黑色(某些黑色像素可能有一些半透明像素)。

我需要重新使用这些位图,并希望能够在运行时基本上从这个位图创建一个Mask,然后尝试与另一种颜色的块(如红色,绿色等)混合,以便最终结果是相同的图像,但红色(并且那些半透明黑色像素的像素变成半透明的红色像素)。

我尝试过各种各样的彩色滤光片和xfermodes,但一直无法弄清楚。请帮忙!

2 个答案:

答案 0 :(得分: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方法,或者更优选使用本机处理。

答案 1 :(得分: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());

    }