Drawable => grayscale

前端 未结 4 1433
清歌不尽
清歌不尽 2020-12-07 23:22

What would be the right way to turn a color Drawable into a grayscale one (to indicate disabled state)?

EDIT:
B/W => grayscale

4条回答
  •  粉色の甜心
    2020-12-07 23:47

    Apparently you can use the ColorMatrix class to do any sort of color-space transformations. It has a setSaturation() method that easily creates a color-to-grayscale transformation (zeroes saturation) for you.

    So, you can use that filter to paint a new copy of the image. I haven't tried this, but it should work:

    Bitmap grayscaleBitmap = Bitmap.createBitmap(
        colorBitmap.getWidth(), colorBitmap.getHeight(),
        Bitmap.Config.RGB_565);
    
    Canvas c = new Canvas(grayscaleBitmap);
    Paint p = new Paint();
    ColorMatrix cm = new ColorMatrix();
    
    cm.setSaturation(0);
    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(cm);
    p.setColorFilter(filter); 
    c.drawBitmap(colorBitmap, 0, 0, p);
    

提交回复
热议问题