尝试使用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
我注意到如果我绘制一定距离的点,反别名似乎按预期工作(第一张图像)。但是用很小的偏移量绘制会产生相同的抗锯齿问题(第二张图片)。
在同一个地方绘制点时,是否需要设置此设置?或者我可能不是在同一个地方画画(或者只有很少的偏移)?
编辑:真正的问题是因为我试图绘制宽度可变线段。请参阅git存储库上的MainActivity.drawSegment
。
答案 0 :(得分:5)
我不认为这是一个问题,我的意思是,一个错误本身。即使我可以解决这个问题。
圆圈边缘的像素是用一些alpha绘制的,例如一个25%alpha的红色像素,如果用相同的alpha覆盖3个像素,你将获得100%的红色像素。
解决方法是管理创建的所有形状,并检查它们中的一些是否具有相同的大小+位置(也许是颜色)并且只绘制其中一个。
下面的链接解释了抗锯齿的工作原理,可能有所帮助。
http://web.cs.wpi.edu/~matt/courses/cs563/talks/antialiasing/methods.html
答案 1 :(得分:4)
它正常工作。消除锯齿是指形状的边缘是半透明的。当你将形状相乘时,半透明的像素会变得不透明,你就会变得粗糙"边缘。
解决方案不是这样做的。