我想在Gtk绘图区域上绘制一些静态和动态图形。在Gtk绘图区域中,每次调用queue_draw时,都会清除所有已绘制的图形,对于复杂的图形,这非常耗时。
有没有一种方法可以专门删除一些图形,并在不删除已绘制图形的情况下添加一些新图形?
例如在image1中,我想保持黑线不变,除非绘图区域窗口大小发生变化,我要在5个红色斑点中保留3个,并添加一些新的蓝色斑点,以便新图像看起来像{{ 3}}。
如果这个问题已经回答,请分享链接。
答案 0 :(得分:0)
我知道两种解决您问题的方法。
存储paths。
您可以在空白的line_to
上绘制内容(使用arc
,cairo_t
等),然后调用cairo_copy_path
并将该路径存储在某处。在下一个"draw"
上,您应该调用cairo_append_path
以应用该路径。
您可以存储整个开罗表面。例如,创建cairo_image_surface,填充它,然后像这样使用它:
draw_surface (cairo_surface_t *src,
cairo_t *dst,
gdouble x,
gdouble y)
{
cairo_surface_mark_dirty (src);
cairo_save (dst);
cairo_translate (dst, x, y);
cairo_set_source_surface (dst, src, 0, 0);
cairo_paint (dst);
cairo_restore (dst);
}