What would be the right way to turn a color Drawable into a grayscale one (to indicate disabled state)?
EDIT:
B/W => grayscale
I know this question was asked a while ago, but I came across a simpler solution that works if you have a Drawable and you just want to display that same drawable in grayscale. No need to have a canvas or a painter...
protected Drawable convertToGrayscale(Drawable drawable) { ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); drawable.setColorFilter(filter); return drawable; }
Hope this helps too!
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With