Drawable =>灰度

yan*_*nko 23 android drawable

将Drawable颜色变为灰度级(表示禁用状态)的正确方法是什么?

编辑:
B/W =>灰度

Jus*_*tin 100

我知道这个问题刚才问过,但是我遇到了一个更简单的解决方案,如果你有一个Drawable,你只想在灰度级中显示相同的drawable.不需要画布或画家......

protected Drawable convertToGrayscale(Drawable drawable)
{
    ColorMatrix matrix = new ColorMatrix();
    matrix.setSaturation(0);

    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);

    drawable.setColorFilter(filter);

    return drawable;
}
Run Code Online (Sandbox Code Playgroud)

希望这也有帮助!

  • 在对其应用滤色器之前,只需改变()你的drawable.可绘制属性在实例之间共享,因此通过改变它,您将创建该drawable的另一个"副本".变异后使用滤色器将是安全的,不会影响您的其他可绘制实例. (5认同)

int*_*tgr 16

显然,您可以使用ColorMatrix该类进行任何类型的颜色空间转换.它有一种setSaturation()方法可以轻松地为您创建颜色到灰度的变换(零饱和度).

因此,您可以使用该过滤器绘制图像的新副本.我没有试过这个,但它应该工作:

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);
Run Code Online (Sandbox Code Playgroud)