【问题标题】:How to tint a Bitmap to a solid color如何将位图着色为纯色
【发布时间】:2018-05-25 19:26:21
【问题描述】:

如何将位图着色为纯色,有效地将所有 alpha > 0 的像素替换为给定的 RGB 值?另外如何做同样的事情,但保持每个像素的 alpha?我不是在寻找每像素操作,因为它们往往很慢。

我尝试使用 ColorMatrixColorFilter 和 ColorFilter,它们会为位图着色,但它们会着色而不是执行 100% 着色。

【问题讨论】:

    标签: android colors tint


    【解决方案1】:

    我通过使用 PorterDuffColorFilter 解决了这个问题

    Paint paint = new Paint();
    paint.setColorFilter(new PorterDuffColorFilter(targetColor, PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(resource, matrix, paint);
    

    【讨论】:

    【解决方案2】:

    只是为了给出更完整的答案。

    这将获取一个位图并输出一个新的着色位图:

    public static Bitmap tintImage(Bitmap bitmap, int color) {
        Paint paint = new Paint();
        paint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN));
        Bitmap bitmapResult = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmapResult);
        canvas.drawBitmap(bitmap, 0, 0, paint);
        return bitmapResult;
    }
    

    【讨论】:

    • color 必须是 ARGB 格式,例如 color = 0xFF0000FF 将图像染成纯蓝色。如果您使用color = 0x0000FF,它会将图像设置为完全透明,因为 alpha 部分 = 0x00。
    【解决方案3】:

    如果您的位图是您想在布局中使用的可绘制对象,那么您可以创建一个引用原始可绘制对象(例如 .png)的新可绘制对象 (.xml)。

    <?xml version="1.0" encoding="utf-8"?>
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/plus"
         android:tint="#2c53e5" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多