Frage

Was wäre der richtige Weg, um eine Farbe in eine Graustufe zu verwandeln (um einen behinderten Zustand anzuzeigen)?

BEARBEITEN:
B/W => Graustufen

War es hilfreich?

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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top