我正在使用 pygtk 和 cairo(......我必须说的很棒的东西。谢谢大家)
我想知道如何在我的 cairo 表面上的大型绘图区域上呈现部分图像。
我希望显示表面内的区域看起来像是被剪裁的,这样我就可以在这些区域中滚动图像而不会干扰周围的绘制项目。
我可以将用于零件绘图的图像剪切到表面上,还是必须以正确的顺序获取绘图顺序,以便需要剪切的图像重叠,因此部分根据需要隐藏并显示为已剪切?
感谢您的任何指点
缺口
开罗确实很棒!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")