为什么Paint.ANTI_ALIAS_FLAG在Canvas上的同一个地方绘图时似乎不起作用?

tat*_*igo 7 android canvas antialiasing

尝试使用android在同一个地方绘制多次时出现反别名问题Canvas.

首先,我正在初始化paint = new Paint(Paint.ANTI_ALIAS_FLAG),然后设置中风上限Paint.Cap.ROUND.

然后,如果我调用canvas.drawPoint(x, y, paint)一次导致以下结果:

在此输入图像描述

canvas.drawPoint(x, y, paint)多次调用(本例中为100)会导致:

在此输入图像描述

我创建了一个使用最少代码的例子来在GitHub上运行它:android-canvas-antialias

我注意到如果我绘制一定距离的点,反别名似乎按预期工作(第一张图像).但是用很小的偏移量绘制它会导致相同的抗锯齿问题(第二张图像).

在同一地点绘制点时,是否需要进行任何设置才能使其工作?或者我可能不是在同一个地方画画(或者偏移很少)?

编辑:真正的问题是因为我正在尝试绘制宽度可变线段.请参阅MainActivity.drawSegmenton git存储库.

Mar*_*lho 5

我不认为这是一个问题,我的意思是,一个错误本身.即使我可以解决这个问题.

圆的边缘的像素用一些alpha绘制,例如,具有25%alpha的红色像素,如果用相同的alpha覆盖更多3个像素,则将获得100%的红色像素.

解决方法是管理创建的所有形状,并检查它们中的一些是否具有相同的大小+位置(也许是颜色)并且只绘制其中一个.

下面的链接解释了抗锯齿的工作原理,可能有所帮助.

http://web.cs.wpi.edu/~matt/courses/cs563/talks/antialiasing/methods.html