如何将Bitmap着色为纯色,有效地替换所有具有alpha>的像素。 0到给定的RGB值?另外如何做同样的事情,但保持每个像素的alpha?我不是在寻找每像素操作,因为它们往往很慢。
我尝试使用ColorMatrixColorFilter和ColorFilter,它们对Bitmap进行着色,但它们着色而不是执行100%色调。
答案 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();
}