2011-01-14 31 views
0

我使用的PyGTK和开罗(...美妙的东西,我必须说,感谢所有)绘制图像的一部分开罗表面

我想知道如何表达我的我的开罗表面图像的部分在一个大型的绘画区。

我希望在显示的表面上有可能出现剪切的区域,这样我就可以通过这些区域滚动图像而不会干扰周围的绘制物品。

我是否可以剪切零件在图面上的图像,或者我必须按照正确的顺序获得图形序列,以便需要剪切的图像被覆盖并且根据需要将零件隐藏并显示剪切?

感谢任何指针

缺口

+0

想获得更多信息,同时等待/希望一些指点...我是沿着线的东西后像OPERATOR_IN这样的开罗运营商的?我无法找到使用这样的细节让我想要的地方... – nick 2011-01-14 17:06:51

回答

1

开罗确实精彩! ctx.clip()是一种使用剪切路径的方法(如下面的pycairo所示,最后一个绘制矩形只能触及三角形剪切区域)。

您也可以使用CAIRO_OPERATOR_OUT(我认为)的传输模式,但我对传输模式不太了解。而这只会在第一次绘制时才起作用,因为您的内容会填满alpha。

(你的“清明上河图令”的建议将正常工作,也当然!)

import cairo 

WIDTH, HEIGHT = 256, 256 

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

ctx.rectangle(0,0,300,300) 
ctx.set_source_rgb(0,0,0) 
ctx.fill() 

ctx.move_to(0,0) 
ctx.line_to(200,90) 
ctx.line_to(90,200) 
ctx.line_to(0,0) 
ctx.close_path() 
ctx.clip() 

ctx.rectangle(0,0,300,300) 
ctx.set_source_rgb(1,1,0) 
ctx.fill() 

surface.write_to_png("clipped.png")