2012-06-05 5 views
-1

드로어 블을 그레이 스케일하고자합니다. 나는 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); 

실마리가 있습니까? 당신은 불변의 드로어 블을 사용했기 때문에이 코드를 사용하여 캔버스 또는 화가를 사용하려면

이 낮은 API에 대한 작동
+0

"작동하지 않음", "작동하지 않음", "작동하지 않음".... ** 무엇이 작동하지 않습니까? 오류가 있습니까? 색상으로 표시됩니까? 또는 무엇을? –

답변

1

, 그것을

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); 
+1

첫 번째 코드가 저에게 효과적이었습니다. 'Bitmap.Config.RGB_565' 대신'Bitmap.Config.ARGB_8888'을 넣어 투명도를 얻었습니다. 두 번째가 작동하지 않습니다 ... – Rafael

관련 문제