Gtk DrawingArea 中的静态图形
Static graphics in Gtk DrawingArea
我想在Gtk绘图区画一些静态图形和一些动态图形。在Gtk绘图区,每次调用queue_draw,都会清除所有已经绘制的图形,对于复杂的图形来说,这是非常耗时的。
有没有办法在已经绘制的图形不被删除的情况下,专门删除一些图形,并添加一些新图形?
例如 image1, I want to keep black line unchanged unless drawing area window size changes, I want to keep 3 out of 5 red spots and add some new blue spots so that new image looks like image2。
如果此问题已得到解答,请分享 link。
我知道 2 种方法可以解决您的问题。
商店paths。
您可以在空 cairo_t
上绘制一些东西(使用 line_to
、arc
等),然后调用 cairo_copy_path
并将该路径存储在某处。在接下来的 "draw"
中,您应该调用 cairo_append_path
来应用该路径。
您可以存储整个 cairo 表面。例如,创建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);
}
我想在Gtk绘图区画一些静态图形和一些动态图形。在Gtk绘图区,每次调用queue_draw,都会清除所有已经绘制的图形,对于复杂的图形来说,这是非常耗时的。
有没有办法在已经绘制的图形不被删除的情况下,专门删除一些图形,并添加一些新图形?
例如 image1, I want to keep black line unchanged unless drawing area window size changes, I want to keep 3 out of 5 red spots and add some new blue spots so that new image looks like image2。
如果此问题已得到解答,请分享 link。
我知道 2 种方法可以解决您的问题。
商店paths。 您可以在空
cairo_t
上绘制一些东西(使用line_to
、arc
等),然后调用cairo_copy_path
并将该路径存储在某处。在接下来的"draw"
中,您应该调用cairo_append_path
来应用该路径。您可以存储整个 cairo 表面。例如,创建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); }