【问题标题】:Why Paint.ANTI_ALIAS_FLAG does not seem to work when drawing at same place on Canvas?为什么 Paint.ANTI_ALIAS_FLAG 在 Canvas 上的同一位置绘图时似乎不起作用?
【发布时间】:2015-08-11 13:53:09
【问题描述】:

尝试使用 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

【问题讨论】:

    标签: android canvas antialiasing


    【解决方案1】:

    我不认为这是一个问题,我的意思是,一个错误本身。即使我猜是微不足道的。

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

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

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

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

    【讨论】:

      【解决方案2】:

      它工作正常。抗锯齿是指形状的边缘是半透明的。当您将形状相乘时,半透明像素会变得不透明,并且会出现“参差不齐”的边缘。

      解决办法是不要这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 2010-10-14
        • 2022-11-13
        • 2012-10-19
        相关资源
        最近更新 更多