lgorse
Mitglied
Hallo,
ich habe folgendes Problem: Ich würde gerne eine Grafikausgabe auf eine Gtk:
rawingArea mittels eines Gdk:
ixmap buffern, da sich das Bild relativ langsam aufbaut (Es werden ganz viele Quadrate mit einer For-Schleife gezeichnet). Ein Quadrat, welches ich außerhalb der for-Schleife zeichne wird ganz normal ausgegeben, die Quadrate in der for-Schleife werden erst ausgegeben, nachdem das Fenster maximiert wird. An den leeren Stellen wird ein zufälliger Bereich aus dem Grafikspeicher ausgegeben (manchmal das Programm selbst, meistens jedoch nur eine schwarze Fläche mit Weißen Linien und Punkten). Was mache ich da falsch?
Hier noch mein Code (etwas vereinfacht, drawingWidth und drawinHeight sind Größe und Breite des Ausgabefensters)
//edit: Wenn ich das Fenster maximiere, wird das Rechteck gezeichnet, aber drumherum ist noch der gleiche Grafiksalat.
//edit: Hat sich erledigt. sizeSquares war 4
Lg,
lgorse
ich habe folgendes Problem: Ich würde gerne eine Grafikausgabe auf eine Gtk:


Hier noch mein Code (etwas vereinfacht, drawingWidth und drawinHeight sind Größe und Breite des Ausgabefensters)
C++:
void drawToWindow(Gtk::DrawingArea* output) {
// In diesen buffer wird die Grafikausgabe gebuffert
Glib::RefPtr<Gdk::Pixmap> buffer = Gdk::Pixmap::create(output->get_window(), drawingWidth, drawingHeight);
// Entsprechender Cairo-Kontext, mit dem auf den Buffer gezeichnet werden kann
Cairo::RefPtr<Cairo::Context> cr_buffer = buffer->create_cairo_context();
cr_buffer->save();
cr_buffer->set_line_width(2.0);
// Wird ganz normal gezeichnet
cr_buffer->set_source_rgb(0, 1, 0);
cr_buffer->rectangle(5, 5, 5, 5);
cr_buffer->fill();
// Der Inhalt von raster wird in buffer gezeichnet
for(int i = 0; i < worldWidth; i++) {
for(int j = 0; j < worldHeight; j++) {
if(raster[i][j] == 0) {
cr_buffer->set_source_rgb(0, 0, 0);
} else if (raster[i][j] == 1) {
cr_buffer->set_source_rgb(0, 1, 0);
} else {
cr_buffer->set_source_rgb(0, 0, 1);
}
// Die Zeile funktioniert nicht
cr_buffer->rectangle(i * (sizeSquares) + marginLeft + 2, j * (sizeSquares) + marginTop + 2, sizeSquares - 4, sizeSquares - 4);
cr_buffer->fill();
// Die Zeile funktioniert
cr_buffer->rectangle(i * 5, j * 5, 2, 2);
cr_buffer->fill();
}
}
output->get_window()->draw_drawable(Gdk::GC::create(buffer), buffer, 0, 0, 0, 0, -1, -1);
cr_buffer->restore();
}
//edit: Wenn ich das Fenster maximiere, wird das Rechteck gezeichnet, aber drumherum ist noch der gleiche Grafiksalat.
//edit: Hat sich erledigt. sizeSquares war 4

Lg,
lgorse
Zuletzt bearbeitet: