Desenhado => escala de cinza
Pergunta
Qual seria a maneira certa de transformar uma cor desenhada em uma escala de cinza (para indicar o estado com deficiência)?
EDITAR:
B/w => cinza
Solução
Sei que essa pergunta foi feita há um tempo atrás, mas me deparei com uma solução mais simples que funciona se você tiver um desenho e você só deseja exibir o mesmo desenhado em escala de cinza. Não há necessidade de ter uma tela ou um pintor ...
protected Drawable convertToGrayscale(Drawable drawable)
{
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(filter);
return drawable;
}
Espero que isso também ajude!
Outras dicas
Aparentemente você pode usar o ColorMatrix
Classe para fazer qualquer tipo de transformação de espaço de cores. Tem um setSaturation()
Método que cria facilmente uma transformação de cor em escala (saturação zero) para você.
Portanto, você pode usar esse filtro para pintar uma nova cópia da imagem. Eu não tentei isso, mas deve funcionar:
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);
Alguns comemos para a resposta de @intgr.
1. Bitmap.Config.ARGB_8888
preservar o canal alfa.
2. Um pequeno código extra:
//remember, you are converting a .png image, as opposed to a Drawable defined in .xml
Bitmap colorBitmap = ((BitmapDrawable)drawable).getBitmap();
// the code by intgr
Drawable grayscaleDrawable = new BitmapDrawable(grayscaleBitmap);
Você está querendo fazer isso programaticamente e não apenas com versões desativadas das imagens? Você pode fazer referência a um XML desenhado, algo como:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_normal_disable" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_selected" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_normal_disable_focused" />
<item
android:drawable="@drawable/btn_default_normal_disable" />
</selector>