Pycairo get_data() 无法与 create_for_rectangle() 一起使用

问题描述 投票:0回答:1

我有一个函数,可以从 RGBA 图像中剪切出形状,方法是将图像转换为 pycairo 表面,从表面剪切出形状,然后将其传输到不同的 pycairo 表面。

这工作正常,因为我尝试保存为 png 来检查图像。但是,我想将新 pycairo 表面中的图像用作数组。

这就是我为实现这一目标而尝试做的事情:

surface2 = surface.create_for_rectangle(x_min*scale,y_min*scale,width,height)
buf = surface2.get_data()
crop = np.ndarray(shape = (math.ceil(height),math.ceil(width),4), dtype = np.uint8, buffer=buf)
return crop

此解决方案取自 pycairo 官方文档。这对于

surface
可以正常工作,但对于
surface2
则不行。我认为这与
create_for_rectangle()
函数有关。我想到的另一个解决方案是将
surface2
写入 png,然后使用
cv2.imread()
来获取它,但这似乎很粗糙。

image-processing pycairo
1个回答
0
投票

我无法找到

create_for_rectangle()
get_data()
互动的答案。然而,作为我打算做的事情的解决方案,我这样做了:

surface2 = cairo.ImageSurface(cairo.FORMAT_ARGB32, round(width), round(height))
ctx2 = cairo.Context(surface2)
ctx2.set_source_surface(surface, -x_min*scale, -y_min*scale)
ctx2.paint()

surface2
现在可以按预期与
get_data()
一起工作,并且我现在能够正确获取与
surface2
关联的 numpy 数组。

© www.soinside.com 2019 - 2024. All rights reserved.