绘制线厚小于一个像素需要的Android 4.2抗混叠(Drawing line less than

2019-07-17 17:53发布

我想绘制的android一个很细的线(小于一个像素厚)。 我正在使用

Paint blackThin = new Paint();
blackThin.setStrokeWidth(0.1f);
blackThin.setColor(Color.BLACK);

初始化喷漆的对象。

这在Android 2.2的正常工作,但是当我尝试在4.2(4.1也,我想 - 我测试了一个简单 - 我没有测试任何其他版本,其他的是2.2,4.1.2和4.2)的行不会显示当我画他们。 为了让他们在4.2露面,好像我必须设置抗锯齿标志是真实的。 (我试过了,和线出现了。)但是我真的不希望这样,因为那模糊的线条和这样。

这是Android的一个bug? 有什么我可以做,使之比开启抗锯齿工作的其他?

编辑:我还具有0.9的像素大小进行了测试,该问题是相同的。

谢谢您的帮助!

Answer 1:

如果你想有一个很细的线,使用setStrokeWidth(0)因为文件说, Pass 0 to stroke in hairline mode.

亚像素绘图显然需要Anitaliasing或其他解决方法。 这是很可能的,例如用软件渲染,一个像素上下行总是画成细线,但硬件渲染(可以在Android 4.2而不是2.2自动使用),行为的改变,许多的方便的功能消失。 (这往往是绘制差异和怪异的毛刺,顺便说一句的原因。)



Answer 2:

你不能得出小于像素线width没有抗锯齿。

抗混叠的整点是计算什么是像素的颜色会是这样,如果一个元素没有完全填充像素(像一条线,这只是一个像素的宽度的十分之一)。

你可以通过绘制一个打火机线有点模仿它,但仍然不会来接近实际抗锯齿线。

看看这张图片,例如:

这真的不是可能通过改变线的颜色复制的反锯齿效果。

我实现该示例中的线的宽度> 1个像素,但同样的原理也适用。 该像素的“黑暗”的计算方法是多少像素的填充线的结果。 出于这个原因,一个灰色实线将无法正常工作。



文章来源: Drawing line less than one pixel thick requires anti-aliasing in Android 4.2