我想向图像视图添加滤色器

发布于 2024-12-17 10:54:55 字数 415 浏览 2 评论 0 原文

我想向 ImageView 添加一个 ColorFilter

目前我正在使用:

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

我已经检查了 PotterDuff 中的多种模式,例如 SRC_INSRC 等,但我没有得到任何任何模式的差异...所有模式都会将整个 ImageView 变成完美的红色。

我需要在现有图像中混合红色,以便图像看起来带有红色调......

I'd like to add a ColorFilter to ImageView.

Currently I'm using:

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

I've checked Multiple Modes in PotterDuff such as SRC_IN, SRC etc., but I'm not getting any difference in any of the modes... All mode turns the whole ImageView in perfect Red color.

I need to blend RED color in the existing image so that image will look with a REDDISH tinge....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

彡翼 2024-12-24 10:54:55

正确的方法是使用 PorterDuff.Mode.LIGHTEN

所以更新后的代码将如下所示:

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

The right way to do it was using PorterDuff.Mode.LIGHTEN.

So the updated code will be like:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);
情感失落者 2024-12-24 10:54:55

您可以使用 android:tint (链接)。例子:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_drawable"
    android:tint="@color/your_color" />

You can use android:tint (link) in you xml file. Example:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_drawable"
    android:tint="@color/your_color" />
殤城〤 2024-12-24 10:54:55

其他解决方案,您可以保留 PorterDuff.Mode.SRC_ATOP 模式并使用另一个 alpha 来获得透明颜色。

我使用 155 作为 Alpha 值:

  final int semiTransparentGrey = Color.argb(155, 185, 185, 185);
  drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP);

Other solution, you could have kept PorterDuff.Mode.SRC_ATOP mode and use another alpha to have a transparent color.

I use 155 as Alpha value:

  final int semiTransparentGrey = Color.argb(155, 185, 185, 185);
  drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP);
情独悲 2024-12-24 10:54:55

这对我有用:

在 res/colors.xml 中:

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

在您的 Activity 中初始化过滤器并突出显示绘制:

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

希望有帮助。

This worked for me:

in res/colors.xml:

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

in your Activity initialize the filter and highlight paint:

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

then apply the filter to the ImageView:

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

if that doesn't work try applying to the ImageView drawable:

iv.getDrawable().setColorFilter(redHighLight);

hope that helps.

情场扛把子 2024-12-24 10:54:55

在您的 xml 文件中,您可以使用 tint 例如,

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

In your xml file you can user tint For example

        <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" />

If You want programmatically add color filter then use

scratchImage_2.setColorFilter(Color.BLACK);

You Can also remove this color filter using this code:

scratchImage_2.setColorFilter(null);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文