【发布时间】:2020-05-23 07:05:40
【问题描述】:
我正在尝试将重叠的透明圆圈绘制到 2d numpy 数组:
img = np.zeros((256, 256), dtype=np.uint8)
surface = cairo.ImageSurface.create_for_data(
img, cairo.FORMAT_A8, 256, 256
)
ctx = cairo.Context(surface)
ctx.arc(128, 128, 22, 0, 2 * math.pi)
ctx.set_source_rgba(1, 1, 1, 1)
ctx.fill()
ctx.arc(128, 102, 22, 0, 2 * math.pi)
ctx.set_source_rgba(0, 0, 0, 0.5)
ctx.fill()
相反,它看起来像这样:
为什么会这样? 我想要的只是绘制相互重叠的透明灰度圆圈,但它似乎没有检测颜色,它只使用 alpha 值。
【问题讨论】:
-
在创建表面时使用 cairo.FORMAT_ARGB32 而不是 cairo.FORMAT_A8 会发生什么?
-
另外 ctx.set_source_rgba() 使用 [0, 1] 范围内的所有浮点数,而不是 256。
-
@hetepeperfan 哎呀,我的意思是 1、1、1。编辑了问题。另外,如果我输入 argb32 和 dtype = uint32。我得到了 2 个不透明的白色圆圈,而另一个圆圈甚至不是黑色的! imgur.com/a/Mwz8lwo
-
经过进一步检查,黑色圆圈似乎有2.15e+0.9的值。而白圈值为4.29e+09。白色圆圈似乎画在上面。因为没有重叠的值。