使用numpy时,python cairo中的第四个数组是什么?



我最近下载了用于Python的cairo,并正在测试这些函数。它与我习惯的其他图形库有很大不同。我认为第4个numpy数组用于alpha值,但第4个数组中的所有值始终是255,无论颜色和alpha值如何。有人知道第四个数组是做什么的吗?我理解,因为笨蛋。uint8,我需要4个数组,因为像素颜色以32位格式存储,但第4个数组似乎从未改变或使用。

import numpy
import cairo
import math
data = numpy.zeros((200, 200, 4), dtype=numpy.uint8)
surface = cairo.ImageSurface.create_for_data(data, cairo.FORMAT_ARGB32, 200, 200)
cr = cairo.Context(surface)
# fill with solid white
cr.set_source_rgb(0.1, 0.1, 0.1)
cr.paint()
# draw circle
cr.arc(100, 100, 80, 0, 2*math.pi)
cr.set_line_width(4)
cr.set_source_rgba(1.0, 0.0, 0.0, 0.1)
cr.stroke()
# draw line
cr.set_source_rgba(1.0,1.0,1.0,1.0)
cr.set_line_width(1)
cr.move_to(35,40.5)
cr.line_to(51, 40.5)
cr.stroke()
data[0:20, 10:20,0:4] = [255, 0, 0, 255]
# write output
print("B")
print(data[35:51, 35:51, 0])
print("G")
print(data[35:51, 35:51, 1])
print("R")
print(data[35:51, 35:51, 2])
print("?")
print(data[35:51, 35:51, 3])
surface.write_to_png("circle.png")

第四个值是alpha。看到https://www.cairographics.org/manual/cairo-Image-Surfaces.html cairo-format-t

如果你想要一个非零的值,试试:

cr.set_source_rgba(0.2, 0.4, 0.6, 0.8)
cr.set_operator(cairo.OPERATOR_SOURCE)
cr.paint()
在代码中,首先用不透明的白色填充所有内容。此时,所有alpha值都变为255,并在接下来的绘图代码中保持这种状态。

最新更新