python中多边形绘制的亚像素精度?

python中多边形绘制的亚像素精度?,python,2d,antialiasing,Python,2d,Antialiasing,我有一些科学数据,这些数据对于准确绘制非常重要。它是以多个侧面共享多边形(voronoi分区输出)的形式出现的,这些多边形高度密集,通常小于画布上的单个像素。但是,我希望像素的值能够可靠地报告位于其中的多边形的综合亮度:因此,例如,如果一个像素一半被亮度为1.0的多边形覆盖,另一半被亮度为0.0的另一个多边形覆盖,那么该像素应该正好为0.5 我是用Python来做这件事的,所以理想情况下,我可以使用一些非常精确的绘图库。Matplotlib有一个令人讨厌的错误,该错误会导致绘制的多边形略小于其实

我有一些科学数据,这些数据对于准确绘制非常重要。它是以多个侧面共享多边形(voronoi分区输出)的形式出现的,这些多边形高度密集,通常小于画布上的单个像素。但是,我希望像素的值能够可靠地报告位于其中的多边形的综合亮度:因此,例如,如果一个像素一半被亮度为1.0的多边形覆盖,另一半被亮度为0.0的另一个多边形覆盖,那么该像素应该正好为0.5

我是用Python来做这件事的,所以理想情况下,我可以使用一些非常精确的绘图库。Matplotlib有一个令人讨厌的错误,该错误会导致绘制的多边形略小于其实际范围[0],从而导致每个多边形的边界周围出现背景色线,即使多边形平铺平面时,其间没有间隙


[0]

这确实可以通过优秀的库实现,该库专门用于高精度、高性能渲染。只需使用
pip安装pycairo
安装

尝试下面的简短示例。请注意亚像素渲染如何使蓝色和红色在某些像素位置混合为紫色

import cairo

WIDTH, HEIGHT = 32, 32

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
ctx = cairo.Context(surface)

# draw blue triangle
ctx.move_to(10, 10)
ctx.line_to(20.5, 10)
ctx.line_to(20.5, 20)
ctx.close_path()

ctx.set_source_rgb(0.5, 0.0, 0.0)
ctx.fill()

# draw blue triangle
ctx.move_to(10, 15)
ctx.line_to(20.5, 15)
ctx.line_to(20.5, 25)
ctx.close_path()

ctx.set_source_rgb(0.0, 0.0, 0.5)
ctx.fill()

surface.write_to_png("example.png")

…欢迎来到stackoverflow.:-)很好的第一个问题,如果我可以这么说的话。