用油漆着色位图?

sev*_*bar 5 java android

我正在尝试创建一个为位图着色的函数,

这有效...

 imgPaint = new Paint();

    imgPaint.setColorFilter(new LightingColorFilter(color,0));

//when image is being drawn
canvas.drawBitmap(img,matrix,imgPaint);
Run Code Online (Sandbox Code Playgroud)

但是,当必须不断(每帧)绘制位图时,我开始看到屏幕滞后,因为在设置滤色器之前没有发生这种情况,我相信每次需要绘制画布时它都会应用过滤器.

有没有办法将油漆一次应用于位图并使其永久更改?

任何帮助表示赞赏:)

Ted*_*opp 5

创建第二个位图并使用滤色器将第一个位图绘制到其中。然后使用第二个位图进行大容量渲染。

编辑:根据请求,这里是执行此操作的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

然后,您将调用此方法一次以将位图转换为着色位图并将结果保存在实例变量中。然后,您将在绘制到canvas. (预先分配Paint您将在主绘制方法中使用的对象并将其保存在实例变量中也是一个好主意,而不是Paint在每次绘制时分配一个新的。)