我正在制作一个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);
在第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中显示?
答案 0 :(得分:2)
这是由开罗图像表面和GDK窗口之间无与伦比的颜色深度引起的。我用32位ARGB创建了图像表面,但窗口是RGB。将图像表面从ARGB修改为RGB后,一切都解决了。