à tous,
Je souhaite afficher une image à partir de données disponible en mémoire (en utilisant gdk_pixbuf_new_from_data).
Mais j'ai un problème lors de l'affichage de l'image : si j'affiche l'image alors que je ne suis pas dans le main : l'image est très détérioré....
Ce sera plus simple avec un exemple :
Code permettant l'affichage de l'image :
Et j'obtient bien l'image suivante, pas de problème :
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
41
42
43
44
45
46
47
48
49 #include <gtk/gtk.h> #include <stdlib.h> #include <math.h> int main(int argc, char **argv) { int cpt = 0; int k,i; GtkWidget *pWindow; GtkWidget *pVBoxmain; guchar pixels[200*200*3]; GdkPixbuf *pixbuf; GtkWidget *pImage; gtk_init(&argc, &argv); // Initialisation de GTK pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(pWindow), "GtkMenu"); gtk_window_set_default_size(GTK_WINDOW(pWindow), 300, 300); g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit),NULL); /* Creation de la première GtkVBox */ pVBoxmain = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(pWindow), pVBoxmain); for (i=0;i<200;i++) { for (k=0;k<200;k++) { pixels[cpt] = 125; pixels[cpt+1] = 125; pixels[cpt+2] = 125; cpt=cpt+3; } } // sauvegarde du pixbuf pixbuf = gdk_pixbuf_new_from_data(pixels, GDK_COLORSPACE_RGB, FALSE, 8,200, 200, 200*3, NULL, NULL); pImage = gtk_image_new_from_pixbuf(pixbuf); gtk_box_pack_start(GTK_BOX(pVBoxmain), pImage, TRUE, TRUE, 0); gtk_widget_show(pWindow); gtk_widget_show_all(pWindow); gtk_main(); return EXIT_SUCCESS; }
Par contre si je fais une fonction qui affiche l'image (j'ai juste copié/collé ce qu'il y avait dans le main) :
Et bien là, j'obtient une image dégradée :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 #include <gtk/gtk.h> #include <stdlib.h> #include <math.h> void affiche(); int main(int argc, char **argv) { gtk_init(&argc, &argv); // Initialisation de GTK affiche(); gtk_main(); return EXIT_SUCCESS; } void affiche() { int cpt = 0; int k,i; GtkWidget *pWindow; GtkWidget *pVBoxmain; guchar pixels[200*200*3]; GdkPixbuf *pixbuf; GtkWidget *pImage; pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(pWindow), "GtkMenu"); gtk_window_set_default_size(GTK_WINDOW(pWindow), 300, 300); g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit),NULL); /* Creation de la première GtkVBox */ pVBoxmain = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(pWindow), pVBoxmain); for (i=0;i<200;i++) { for (k=0;k<200;k++) { pixels[cpt] = 125; pixels[cpt+1] = 125; pixels[cpt+2] = 125; cpt=cpt+3; } } // sauvegarde du pixbuf pixbuf = gdk_pixbuf_new_from_data(pixels, GDK_COLORSPACE_RGB, FALSE, 8,200, 200, 200*3, NULL, NULL); pImage = gtk_image_new_from_pixbuf(pixbuf); gtk_box_pack_start(GTK_BOX(pVBoxmain), pImage, TRUE, TRUE, 0); gtk_widget_show(pWindow); gtk_widget_show_all(pWindow); }
Quelqu'un aurait une idée pour remédier à cela? ou bien je n'utilise pas correctement le gdkpixbuf?
Partager