سؤال

ما هي الطريقة الصحيحة لتحويل اللون القابل للرسم إلى لون رمادي (للإشارة إلى الحالة المعوقة)؟

تعديل:
ب/ث => رمادي

هل كانت مفيدة؟

المحلول

أعلم أن هذا السؤال قد تم طرحه منذ فترة ، لكنني صادفت حلاً أبسط يعمل إذا كان لديك رسم وترغب فقط في عرض نفس السحب في رمادي. لا حاجة للحصول على قماش أو رسام ...

protected Drawable convertToGrayscale(Drawable drawable)
{
    ColorMatrix matrix = new ColorMatrix();
    matrix.setSaturation(0);

    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);

    drawable.setColorFilter(filter);

    return drawable;
}

أتمنى أن يساعد هذا أيضًا!

نصائح أخرى

يبدو أنه يمكنك استخدام ColorMatrix فئة للقيام بأي نوع من التحولات في مساحة الألوان. لديها setSaturation() الطريقة التي تنشئ بسهولة تحول من اللون إلى غرامات (تشبع الأصفار) لك.

لذلك ، يمكنك استخدام هذا المرشح لرسم نسخة جديدة من الصورة. لم أحاول هذا ، لكن يجب أن يعمل:

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

بعض القوانين إلى إجابة intgr.
1. Bitmap.Config.ARGB_8888 للحفاظ على قناة ألفا.
2. رمز إضافي صغير:

//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);

هل تريد على وجه التحديد القيام بذلك برمجيًا وليس فقط مع الإصدارات المعوقة من الصور؟ يمكنك الرجوع إلى XML قابلة للرسم ، شيء مثل:

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top