Bonjour,
Je débute avec glade et gtk+, je dois écrire un programme en langage C qui passe une image en rouge après un clic sur un bouton.
Dans mon projet glade, j'ai associé le signal cliked de mon bouton "rouge" avec la fonction "on_click_button_red"
Mon image originale s'affiche correctement, un clic sur le bouton m'aiguille bien sur la fonction se trouvant dans le callback.c mais l'image ne passe jamais en rouge.
D'où mon impression que le problème vient du non rafraichissement de l'image.
Mon code "main.c" est :
Dans mon programme "callbacks.c" j'ai les fonctions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 int main(int argc, char *argv[]) { GtkWidget *window1 = NULL; GtkBuilder *builder = NULL; GtkImage *image1; GdkPixbuf *gdk_pixbuf = NULL; gtk_init(&argc, &argv); builder = gtk_builder_new(); if (gtk_builder_add_from_file(builder, "projet.glade", NULL) == 0) { fprintf(stderr, "Erreur ouverture fichier GLADE\n"); exit(EXIT_FAILURE); } window1 = GTK_WIDGET(gtk_builder_get_object(builder, "window1")); gtk_window_set_default_size(GTK_WINDOW(window1), 1920, 1080); image1 = GTK_IMAGE(gtk_builder_get_object(builder, "image1")); gdk_pixbuf = gdk_pixbuf_new_from_file("image.png", NULL); gtk_builder_connect_signals(builder, NULL); gtk_image_set_from_pixbuf(image1, gdk_pixbuf); gtk_widget_queue_draw(GTK_WIDGET(image1)); gtk_widget_show_all(window1); gtk_main(); g_object_unref(G_OBJECT(builder)); return 0; }
Merci d'avance pour vos retours.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 void on_click_button_red(GtkButton *button, gpointer user_data){ GtkBuilder *builder = NULL; GdkPixbuf *gdk_pixbuf = NULL; GtkImage *image1=NULL; GtkWidget *window1 = NULL; int w,h,x,y = 0; guchar *r = 0; guchar *g = 0; guchar *b = 0; if (gtk_builder_add_from_file(builder, "projet.glade", NULL) == 0) {}; window1 = GTK_WIDGET(gtk_builder_get_object(builder, "window1")); image1 = GTK_IMAGE(gtk_builder_get_object(builder, "image1")); gdk_pixbuf = gdk_pixbuf_new_from_file("image.png", NULL); w = gdk_pixbuf_get_width(gdk_pixbuf); h = gdk_pixbuf_get_height(gdk_pixbuf); for (x = 0; x <= w; x++) { for (y=0; y <= h; y++) { /* passage en rouge*/ gdkpixbuf_set_pixel_color(gdk_pixbuf, x, y, 255, 0, 0); } } image1 = GTK_IMAGE(gtk_image_new_from_pixbuf(gdk_pixbuf)); gtk_image_set_from_pixbuf(image1, gdk_pixbuf); gtk_widget_queue_draw(GTK_WIDGET(image1)); gtk_widget_show_all(window1); } gboolean gdkpixbuf_set_pixel_color(GdkPixbuf *pixbuf, gint x, gint y, guchar red, guchar green, guchar blue) { ........... }![]()
Partager