Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Drawable => grayscale

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

EDIT:
B/W => grayscale

like image 706
yanchenko Avatar asked Nov 24 '09 22:11

yanchenko


2 Answers

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!

like image 71
Justin Avatar answered Oct 02 '22 17:10

Justin


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); 
like image 20
intgr Avatar answered Oct 02 '22 15:10

intgr