Android 可绘制灰度

Android 可绘制灰度,android,image,drawable,Android,Image,Drawable,我想把一个可画的画灰度化。我正在尝试什么,但它对甜甜圈(1.6)和Eclair(2.1)不起作用。它适用于Android 2.2+。我正在尝试的代码如下所示: ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); drawable.setColorFilter(filter); 有什么

我想把一个可画的画灰度化。我正在尝试什么,但它对甜甜圈(1.6)和Eclair(2.1)不起作用。它适用于Android 2.2+。我正在尝试的代码如下所示:

ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(filter);

有什么线索吗?

这适用于较低的Api,试试看

 public Bitmap toGrayscale(Bitmap bmpOriginal)
    {        
        int width, height;
        height = bmpOriginal.getHeight();
        width = bmpOriginal.getWidth();    

        Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        Canvas c = new Canvas(bmpGrayscale);
        Paint paint = new Paint();
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(0);
        ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
        paint.setColorFilter(f);
        c.drawBitmap(bmpOriginal, 0, 0, paint);
        return bmpGrayscale;
    }
如果您想使用画布或画师,请使用此代码,因为您使用的是不可变的drawable,所以无法为代码获取灰度图像

Bitmap immutableBitmap = BitmapFactory.decodeResource(getResources(), 
    R.drawable.my_drawable);
Bitmap mutableBitmap = immutableBitmap.copy(Bitmap.Config.ARGB_8888, true);

//you have two bitmaps in memory, so clean up the mess a bit
immutableBitmap.recycle(); immutableBitmap=null;

Drawable d = new BitmapDrawable(mutableBitmap);

//mutate it
d.setColorFilter(new LightingColorFilter(color, lightenColor));

imageView.setImageDrawable(d);

第一个代码对我有用。我没有使用
Bitmap.Config.RGB_565
而是使用
Bitmap.Config.ARGB_8888
来获得透明度。第二个不起作用……“不起作用”、“不起作用”、“不起作用”。。。。什么不起作用?你有错误吗?它是彩色的吗?还是怎样