0

我正在使用 pygtk 和 cairo(......我必须说的很棒的东西。谢谢大家)

我想知道如何在我的 cairo 表面上的大型绘图区域上呈现部分图像。

我希望显示表面内的区域看起来像是被剪裁的,这样我就可以在这些区域中滚动图像而不会干扰周围的绘制项目。

我可以将用于零件绘图的图像剪切到表面上,还是必须以正确的顺序获取绘图顺序,以便需要剪切的图像重叠,因此部分根据需要隐藏并显示为已剪切?

感谢您的任何指点

缺口

4

1 回答 1

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")
于 2011-01-15T05:05:43.823 回答