首页 文章

如何将位图着色为纯色

提问于
浏览
18

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

我尝试使用ColorMatrixColorFilter和ColorFilter,它们对Bitmap进行着色,但它们着色而不是执行100%色调 .

3 回答

  • 22

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

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

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

    这将采用位图并输出新的着色位图:

    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;
    }
    
  • 37

    如果您的位图是您想要在布局中使用的drawable,那么您可以创建一个引用原始drawable(例如.png)的新drawable(.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" />
    

相关问题