如何将位图着色为纯色

时间:2011-06-13 14:39:02

标签: android colors tint

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

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

3 个答案:

答案 0 :(得分:37)

我通过使用PorterDuffColorFilter

解决了这个问题
Paint paint = new Paint();
paint.setColorFilter(new PorterDuffColorFilter(targetColor, PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(resource, matrix, paint);

答案 1 :(得分:23)

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

这将采用位图并输出一个新的有色位图:

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

答案 2 :(得分:1)

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

public function getAll(){
    $dql = SELECT p, c FROM App\Entity\Product p LEFT JOIN p.category c;
    return $this->getEntityManager()->createQuery($dql)->getResult();
}