Frage
Was wäre der richtige Weg, um eine Farbe in eine Graustufe zu verwandeln (um einen behinderten Zustand anzuzeigen)?
BEARBEITEN:
B/W => Graustufen
Lösung
Ich weiß, dass diese Frage vor einiger Zeit gestellt wurde, aber ich bin auf eine einfachere Lösung gestoßen, die funktioniert, wenn Sie ein Zeichnung haben und nur in Graustufen das gleiche Zeichnung anzeigen möchten. Keine Notwendigkeit, eine Leinwand oder einen Maler zu haben ...
protected Drawable convertToGrayscale(Drawable drawable)
{
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(filter);
return drawable;
}
Hoffe das hilft auch!
Andere Tipps
Anscheinend können Sie die verwenden ColorMatrix
Klasse, um irgendeine Art von Farb-Raum-Transformationen durchzuführen. Es hat ein setSaturation()
Methode, die leicht eine Farb-zu-Grauen-Transformation (Nullensättigung) für Sie erzeugt.
Sie können diesen Filter also verwenden, um eine neue Kopie des Bildes zu malen. Ich habe das nicht versucht, aber es sollte funktionieren:
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);
Einige Coments auf die Antwort von @Intgr.
1. Bitmap.Config.ARGB_8888
Um das Alpha-Kanal zu erhalten.
2. Ein kleiner zusätzlicher Code:
//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);
Möchten Sie dies ausdrücklich programmatisch und nicht nur mit behinderten Versionen der Bilder tun? Sie könnten auf eine XML -Zeichnung verweisen, so etwas wie:
<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>