首页 文章

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

提问于
浏览
1

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

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

我尝试过各种各样的彩色滤光片和xfermodes但是还没弄清楚 . 请帮忙!

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方法,或者更优选使用本机处理 .

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

相关问题