Problème d'affichage d'image
:salut: à 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 :
Code:
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;
} |
Et j'obtient bien l'image suivante, pas de problème :
http://img518.imageshack.us/img518/3070/image2md6.png
Par contre si je fais une fonction qui affiche l'image (j'ai juste copié/collé ce qu'il y avait dans le main) :
Code:
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);
} |
Et bien là, j'obtient une image dégradée :
http://img239.imageshack.us/img239/4846/image1at1.png
Quelqu'un aurait une idée pour remédier à cela? ou bien je n'utilise pas correctement le gdkpixbuf?