【问题标题】:Drawable Grayscale可绘制灰度
【发布时间】:2012-06-05 20:47:31
【问题描述】:

我想灰度一个drawable。我正在尝试Justin suggested,但它不适用于 Donut (1.6) 和 Eclair (2.1)。它适用于Android 2.2+。我正在尝试的代码如下:

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

有什么线索吗?

【问题讨论】:

  • “不工作”、“不工作”、“不工作”......什么不工作?你有错误吗?它是用颜色显示的吗?还是什么?

标签: android image drawable


【解决方案1】:

这适用于Lower 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;
    }

如果您想使用画布或画家使用此代码,则无法为您的代码获取灰度图像,因为您使用了不可变的可绘制对象

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 来获得透明度。第二个不起作用...
猜你喜欢
  • 2010-12-20
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2015-04-22
  • 1970-01-01
  • 2023-03-03
  • 2012-05-26
相关资源
最近更新 更多