я хочу добавить цветной фильтр к изображению - PullRequest
22 голосов
/ 19 ноября 2011

Я бы хотел добавить ColorFilter к ImageView.

В настоящее время я использую:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);

Я проверил несколько режимов в PotterDuff, таких как SRC_IN, SRC и т. Д., Но я не вижу никакой разницы ни в одном из режимов ... Все режимы превращают все ImageView в идеальный красный цвет.

Мне нужно смешать КРАСНЫЙ цвет в существующем изображении, чтобы изображение выглядело КРАСНЫМ оттенком ....

Ответы [ 5 ]

31 голосов
/ 25 января 2013

Правильный способ сделать это - использовать PorterDuff.Mode.LIGHTEN.

Таким образом, обновленный код будет выглядеть так:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);
7 голосов
/ 01 января 2017

Вы можете использовать android: оттенок ( ссылка ) в вашем XML-файле. Пример:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_drawable"
    android:tint="@color/your_color" />
7 голосов
/ 19 ноября 2011

Это сработало для меня:

в res / colors.xml:

<color name="highlight_color_filter">#A5FF0000</color>

в вашей деятельности инициализируйте фильтр и выделите краску:

int highlightColor = context.getResources().getColor(R.color.highlight_color_filter);
PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(highlightColor, PorterDuff.Mode.SRC_ATOP);

Paint redHighLight = new Paint();
redHighLight.setColorFilter(targetHitFilter);
redHighLight.setAlpha(190);

затемпримените фильтр к ImageView:

ImageView iv=(ImageView)findViewById(ResIdOfImageToFilter);
iv.setColorFilter(redHighLight);

, если это не сработает, попробуйте применить к рисованию ImageView:

iv.getDrawable().setColorFilter(redHighLight);

надеюсь, что это поможет.

5 голосов
/ 05 сентября 2013

Другое решение, вы могли бы сохранить режим PorterDuff.Mode.SRC_ATOP и использовать другой альфа для получения прозрачного цвета.

Я использую 155 в качестве альфа-значения:

  final int semiTransparentGrey = Color.argb(155, 185, 185, 185);
  drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP);
1 голос
/ 30 июля 2017

В вашем xml-файле вы можете использовать оттенок Например

        <ImageView
            android:id="@+id/scrachImage_1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:tint="@color/colorAccent"
            android:src="@drawable/eagle" />

Если вы хотите программно добавить цветной фильтр, используйте

scratchImage_2.setColorFilter(Color.BLACK);

Вы также можете удалить этот цветной фильтр, используя этот код:

scratchImage_2.setColorFilter(null);

...