2016-09-26 7 views
1

Ich mache ein Gtk2-Programm, das eine vorberechnete Daten Heatmap-Bild zu einem GtkDrawingArea rendert. Das Verfahren ist im Allgemeinen wie folgt:Kairo Bild nicht auf GtkDrawingArea

  • erzeugen Heatmap-Bild auf einer Kairo-Bildoberfläche;
  • Verbindung expose Ereignis der GtkDrawingArea;
  • Rückruf in belichten, werden folgende Funktionen genannt:

in erster Funktion, klare vorherige Zeichnung zu schlichter grauer Farbe:

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); 

in der zweiten Funktion, das Pre-gerendertes Bild malen:

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

in der 3. Funktion, zeichnen einige Vektor Indikationen:

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); 

Allerdings hat nur die 1. und 3. Funktion Wirkung, das Bildanstrich in 2. Funktion wird nicht angezeigt: Resultierende GtkDrawingArea haben nur einen mittelgrauen Hintergrund mit schwarzen Linien.

Ich bin sicher, die Quelle Bildoberfläche ist mit Inhalt gefüllt, wie ich es in PNG-Datei exportiert und es hat Inhalt. Warum wird es nicht in der GUI angezeigt?

Antwort

1

Dies wird durch die unerreichte Farbtiefe zwischen der Cairo-Bildoberfläche und dem GDK-Fenster verursacht. Ich habe die Bildoberfläche in 32-Bit-ARGB erstellt, aber das Fenster ist RGB. Nachdem ich die Bildoberfläche von ARGB auf RGB umgestellt habe, ist alles gelöst.