开罗图像不在 GtkDrawingArea 上绘画

Cairo image not painting on GtkDrawingArea

我正在制作一个 Gtk2 程序,将预先计算的数据热图图像渲染到 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);

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

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 中?

这是由于 Cairo 图像表面和 GDK 之间的颜色深度不匹配造成的 window。我在 32 位 ARGB 中创建了图像表面,但 window 是 RGB。我将图像表面从ARGB修改为RGB后,一切都解决了。