2016-09-26 75 views
1

我正在製作一個Gtk2程序,將預先計算的數據熱圖圖像呈現給GtkDrawingArea。程序一般是這樣的:開羅圖像不在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); 
在第三函數

,畫出一些矢量適應症:

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

這是由於開羅圖像表面和GDK窗口之間色彩深度不匹配造成的。我用32位ARGB創建了圖像表面,但窗口是RGB。將圖像表面從ARGB修改爲RGB後,一切都解決了。