AvoidXferMode替换画布上的颜色

bot*_*aap 4 graphics android

我正在尝试使用AvoidXferMode替换 Canvas上绘制的颜色.从android文档看起来它正是我需要的:

AvoidXfermode xfermode将在除opColor顶部之外的任何地方绘制src,或者根据模式,仅在opColor之上绘制.

我正在尝试的是这样的:

Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawPaint(paint); // actually drawing a bitmap here
paint.setXferMode(new AvoidXferMode(Color.RED, 0, TARGET);
paint.setColor(Color.GREEN);
canvas.drawPaint(paint);
Run Code Online (Sandbox Code Playgroud)

然而,这只是一个红色的屏幕,而不是我想象的绿色(用绿色代替红色).我想我错过了一些地方......有什么建议吗?

bot*_*aap 5

我终于发现问题是什么,这里有一些线索:AvoidXferMode Tolerance但是当我读这篇文章时它真的打了我http://stuffthathappens.com/blog/2010/06/04/android-color-banding/作者:Eric Burke.容差失败,因为视图画布不在8888模式下.

这意味着当您在该画布上绘制颜色或位图时,颜色将转换为目标像素格式,颜色可能会略有变化.要解决此问题,您可以切换整个窗口像素格式,如Eric的帖子中所示,或者您可以绘制到8888后台缓冲区.

不幸的是,Eric的帖子已经死了,但是Roman Guy在这里也写了类似的内容:http://www.curious-creature.org/2010/12/08/bitmap-quality-banding-and-dithering/