开罗图像不在GtkDrawingArea上绘画

时间:2016-09-26 07:25:16

标签: cairo gtk2

我正在制作一个Gtk2程序,将预先计算的数据热图图像呈现给GtkDrawingArea。程序通常是这样的:

  • 在开罗图像表面生成热图图像;
  • 连接GtkDrawingArea的公开事件;
  • 在公开回调中,调用以下函数:

在第一个函数中,将上一个绘图清除为纯灰色:

cairo_t* cr = gdk_cairo_create(widget->window);
cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
cairo_paint(cr);
cairo_destroy(cr);

在第二个函数中,绘制预渲染图像:

cairo_t* cr = gdk_cairo_create(widget->window);
cairo_set_source_surface(cr, buffer_surface, 0, 0);
cairo_paint(cr);
cairo_destroy(cr);

在第3个函数中,绘制一些矢量指示:

cairo_t* cr = gdk_cairo_create(widget->window);
cairo_move_to(cr, xxx, xxx);
cairo_line_to(cr, xxx, xxx);
cairo_line_to(cr, xxx, xxx);
cairo_line_to(cr, xxx, xxx);
......
cairo_stroke(cr);
cairo_destroy(cr);

但是,只有第1和第3个功能有效,第2个功能中的图像绘制不显示:结果GtkDrawingArea只有中灰色背景,黑色线条。

我确信源图像表面充满了内容,因为我已将其导出到png文件并且确实有内容。为什么它没有在GUI中显示?

1 个答案:

答案 0 :(得分:2)

这是由开罗图像表面和GDK窗口之间无与伦比的颜色深度引起的。我用32位ARGB创建了图像表面,但窗口是RGB。将图像表面从ARGB修改为RGB后,一切都解决了。

相关问题