我正在尝试创建一个为Bitmap着色的函数,
这有效......
imgPaint = new Paint();
imgPaint.setColorFilter(new LightingColorFilter(color,0));
//when image is being drawn
canvas.drawBitmap(img,matrix,imgPaint);
然而,当必须不断地绘制位图(每一帧)时,我开始看到屏幕滞后,因为在设置滤色器之前没有发生这种情况,我相信它每次我需要时都应用滤镜绘制的画布。
有没有办法将绘制一次应用到位图并永久更改?
任何帮助表示赞赏:)
答案 0 :(得分:4)
创建第二个位图,并使用滤镜将第一个位图绘制到其中。然后使用第二个位图进行高容量渲染。
编辑:根据请求,这里是执行此操作的代码:
public Bitmap makeTintedBitmap(Bitmap src, int color) {
Bitmap result = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
Canvas c = new Canvas(result);
Paint paint = new Paint();
paint.setColorFilter(new LightingColorFilter(color,0));
c.drawBitmap(src, 0, 0, paint);
return result;
}
然后,您将调用此方法一次,将位图转换为有色位图,并将结果保存在实例变量中。然后,您将在绘制到canvas
的方法中直接使用有色位图(不使用滤色器)。 (在主绘制方法中预先分配您将使用的Paint
对象并将其保存在实例变量中也是一个好主意,而不是每次都分配一个新的Paint
。绘制。)