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

Sub-pixel accuracy for polygon drawing in python?

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

我在 Python 中执行此操作,因此理想情况下,我可以使用一些用于高度精确绘图的不错的库。 Matplotlib 有一个讨厌的错误,导致绘制的多边形略小于其实际范围[0],导致每个多边形的边界周围出现背景色线条,即使多边形之间没有间隙地平铺平面。

[0]https://github.com/matplotlib/matplotlib/issues/2823

优秀的Cairo library, specially made for high precision, high performance rendering. Just install the python bindingpip install 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")