我有一个带有一些透明像素的位图,其余部分主要是黑色(一些黑色像素可能有一些半透明像素)。
我需要重新使用这些位图,并希望能够在运行时从这个位图中创建一个遮罩,然后尝试与另一种颜色(如红色、绿色等)的块混合,以便最终结果相同图像但具有红色(并且那些半透明黑色像素变成半透明红色像素的像素)。
我尝试了各种颜色过滤器和 xfermodes,但无法弄清楚。请帮忙!
我有一个带有一些透明像素的位图,其余部分主要是黑色(一些黑色像素可能有一些半透明像素)。
我需要重新使用这些位图,并希望能够在运行时从这个位图中创建一个遮罩,然后尝试与另一种颜色(如红色、绿色等)的块混合,以便最终结果相同图像但具有红色(并且那些半透明黑色像素变成半透明红色像素的像素)。
我尝试了各种颜色过滤器和 xfermodes,但无法弄清楚。请帮忙!
如果您不需要高速,您可以通过手动混合像素来使用简单的解决方案。
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方法,或者更可取的是本机处理。
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());
}