Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21896
  • 博文数量: 4
  • 博客积分: 1499
  • 博客等级: 上尉
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 20:32
文章分类

全部博文(4)

文章存档

2011年(1)

2010年(2)

2009年(1)

我的朋友

分类: LINUX

2010-01-16 08:32:59

    以前在windows下开发时做过绘图的程序,现在在Linux下绘图首先就想到了双缓冲,我就沿着这个思路,找到了下面这个方法。
    首先,创建一个surface

surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,

                                      screen_width,

                                      screen_height);

 

这里是创建了一个和屏幕一样大小的surface,然后在expose_event中绘图,有类似下面的代码

static gboolean
expose_event (GtkWidget *widget,
              GdkEventExpose *event,
              gpointer data)
{
    cairo_t *cr;
    cr = gdk_cairo_create (GDK_DRAWABLE (widget->window));
    draw (surface);
    cairo_set_source_surface (cr, surface, 0, 0);
    cairo_paint (cr);
    cairo_destroy (cr);
    return TRUE;
}

void draw (cairo_surface_t surface)
{
    cairo_t *cr;
    cr = cairo_create (surface);
    /* do drawing */
    cairo_stroke (cr);
    cairo_destroy (cr);
}

这样只需要画你需要的部分,而不需要全部重画,之前画过的部分都保存在surface中,就不会因屏幕的刷新而丢失了,最后不要忘记删除surface。

cairo_surface_destroy (surface);

    总而言之,要提高程序的执行速度,就要减少操作的次数。


 


阅读(1000) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~