Drawable => шкала полутонов

Как упомянутый выше Peter, если у Вас уже есть .cur файл, можно использовать его в качестве встроенного ресурса путем создания фиктивного элемента в разделе ресурса, и затем ссылки на курсор макета при необходимости в нем.

, Например, скажите, что Вы хотели отобразить нестандартные курсоры в зависимости от выбранного инструмента.

Добавляют к ресурсам:

<Window.Resources>
    <ResourceDictionary>
        <TextBlock x:Key="CursorGrab" Cursor="Resources/Cursors/grab.cur"/>
        <TextBlock x:Key="CursorMagnify" Cursor="Resources/Cursors/magnify.cur"/>
    </ResourceDictionary>
</Window.Resources>

Пример встроенного курсора сослался в коде:

if (selectedTool == "Hand")
    myCanvas.Cursor = ((TextBlock)this.Resources["CursorGrab"]).Cursor;
else if (selectedTool == "Magnify")
    myCanvas.Cursor = ((TextBlock)this.Resources["CursorMagnify"]).Cursor;
else
    myCanvas.Cursor = Cursor.Arrow;

-Ben

23
задан yanchenko 24 November 2009 в 22:30
поделиться

3 ответа

Очевидно, вы можете использовать класс 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);
16
ответ дан 29 November 2019 в 00:37
поделиться

Вы хотите сделать это программно, а не только с отключенными версиями образов? Вы можете ссылаться на 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>
1
ответ дан 29 November 2019 в 00:37
поделиться

Некоторые комментарии к ответу @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);
2
ответ дан 29 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: