我正在尝试使用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)
然而,这只是一个红色的屏幕,而不是我想象的绿色(用绿色代替红色).我想我错过了一些地方......有什么建议吗?
我终于发现问题是什么,这里有一些线索: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/
| 归档时间: |
|
| 查看次数: |
3441 次 |
| 最近记录: |