-1

ドローアブルをグレースケールしたい。ジャスティンが提案したことを試していますが、ドーナツ (1.6) とエクレア (2.1) では機能しません。Android 2.2+で動作します。私が試しているコードは次のとおりです。

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

手がかりはありますか?

4

1 に答える 1

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);
于 2012-06-05T21:07:16.247 に答える