Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics 绘制抗锯齿梯形_Graphics_Antialiasing - Fatal编程技术网

Graphics 绘制抗锯齿梯形

Graphics 绘制抗锯齿梯形,graphics,antialiasing,Graphics,Antialiasing,我试着从顶部开始,一行一行地画一个抗锯齿梯形。当线条不是整数像素数时,末端像素是背景灰度级和梯形灰度级的加权平均值,例如,如果线条长度为128.5像素,则在每一端,灰度级为: 不幸的是,结果不是很平滑(我已在线性化显示上对此进行了检查): 我假设在每一行的末尾,我需要考虑到它周围的所有像素,以达到一个合适的灰度,但我不知道如何做到这一点。有指针吗?如果速度不是问题,一个可能的解决方案是以4或8倍的分辨率绘制一个非抗锯齿梯形,然后线性缩小图像。由于梯形是凸的,因此很容易根据梯形对点进行分类:一个

我试着从顶部开始,一行一行地画一个抗锯齿梯形。当线条不是整数像素数时,末端像素是背景灰度级和梯形灰度级的加权平均值,例如,如果线条长度为128.5像素,则在每一端,灰度级为:

不幸的是,结果不是很平滑(我已在线性化显示上对此进行了检查):


我假设在每一行的末尾,我需要考虑到它周围的所有像素,以达到一个合适的灰度,但我不知道如何做到这一点。有指针吗?

如果速度不是问题,一个可能的解决方案是以4或8倍的分辨率绘制一个非抗锯齿梯形,然后线性缩小图像。

由于梯形是凸的,因此很容易根据梯形对点进行分类:一个点位于所有梯形边的左侧(假设梯形为逆时针方向)

假设正方形像素(以及大于像素的梯形),则可以通过对其角点进行分类来轻松地将像素相对于梯形进行分类:如果所有四个角点都在外侧,则像素在外侧;如果所有四个角点都在内侧,则像素在内侧。对于其他像素,可以通过超级采样进行抗锯齿处理

您还可以使用中的四叉树进行自适应渲染,但您必须对正方形与三角形进行更稳健的相交测试 梯形(或通常为凸多边形)。您只需检测正方形和曲形体何时不相交或正方形何时位于梯形内。四叉树超出像素级的深度将决定抗锯齿的精细程度


最后,您还可以通过计算梯形覆盖的像素面积百分比来进行精确渲染。这是一个多边形剪裁的问题,您可以使用。

@Robs,如果您最终实现了其中任何一个,我希望看到图像和代码,如果您可以共享的话。谢谢。
    0.25*(trapezoid_greylevel)+0.75*(background_greylevel)