Bonjour,
je cherche a afficher une image a partir d'un programme en C, avec GTK
Merci pour votre aide
++
Version imprimable
Bonjour,
je cherche a afficher une image a partir d'un programme en C, avec GTK
Merci pour votre aide
++
Salut, gtk_image_new_from_file devrait convenir ... sinon plus de détails si cela ne te conviens pas !
j'ai essayer avec la fonction gtk_image_new_from_file mais rien a faire, ca ne marche pas (il me met une feuille blanche avec une croix rouge a l'intérieur à la place de l'image)
Oui, cela indique qu'il y'a eu une erreur pendant le chargement de l'image ... peut-être est-ce une image avec un format non supporté, enregistre voir ton image en JPG par exemple et tente le coup à nouveau, sinon vérifie bien que le chemin indiqué est correcte !Citation:
Envoyé par gy0m76
Tu peux aussi utiliser une autre approche qui te permet de détecter les éventuelles erreurs soit en utilisation d'abord la fonction gdk_pixbuf_new_from_file puis si le chargement a réussi, tu peux ensuite utiliser la fonction gtk_image_new_from_pixbuf
voici mes 2 lignes de commandes
pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", NULL);
pPixBufB = gdk_pixbuf_new_from_file("/usr/share/pixmaps/11.jpg", NULL);
j'ai essayer en jpg en png, ca ne change rien... :cry:
L'avantage de cette fonction est la possibilité d'avoir un message d'erreur clair et en générale, assez précis sur l'erreur rencontrée mais, si tu laisse l'argument sur la valeur NULL, tu ne risques pas de savoir pourquoi il y'a une erreur pendant le chargement ... ce n'est pas pour faire beau ou plus pro que je t'ai proposé cette fonction !Citation:
Envoyé par gy0m76
ke veut tu ke je mette a la place??? J'ai essayer avec un 0, mais ca ne donne rien...
Tu as pourtant le prototype sur le lien que je t'ai donné, je vois rien de compliqué:Citation:
Envoyé par gy0m76
soit un appel avec gestion d'erreur:Code:
1
2 GdkPixbuf* gdk_pixbuf_new_from_file (const char *filename, GError **error);
Là au moins tu sais quelle est la cause de l'erreur !Code:
1
2
3
4
5
6
7
8
9
10
11
12 #include <glib/gprintf.h> ... GError * error; ... pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", &error); if (pPixBufA == NULL) { g_printf ("%s\n", error->message); g_error_free (error); }
maintenant ca plante lorsque j'execute mon programme...
j'ai une autre petite question, cmt fait ton pour recupérer une variable saisie dans un GtkEntry. Je saise des chiffres, et je souhaite multiplier cette valeur par un nombre réel.
Voici ce que ca pourrait donner au final avec encore un peu plus de protection:Citation:
Envoyé par gy0m76
Sinon il n'y a pas de raison que ca plante :aie:Code:
1
2
3
4
5
6
7
8
9
10
11 #include <glib/gprintf.h> ... GError * error = NULL; ... pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", &error); if (pPixBufA == NULL && error != NULL) { g_printf ("%s\n", error->message); g_error_free (error); }
Bin suffit de regarder encore une fois dans la ref de l'API de GTK+ dans la parties des GtkEntry soit la fonction: gtk_entry_get_text. Il te suffit ensuite de convertir ta chaîne avec par exemple la fonction g_strtod ;)Citation:
Envoyé par gy0m76
pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", &error);
J'ai une erreur sur cette ligne, il me dit que l'assignation n'est pas bonne...???
23 C:\Documents and Settings\Administrateur\Mes documents\Gy0m\main.c [Warning] assignment from incompatible pointer type
Heu j'espère au moins que tu as le bon réflexe de sorte que ton pointeur pPixBufA soit du type GdkPixbuf et non pas un simple GtkWidget !Citation:
Envoyé par gy0m76
oui j'ai eu le bon reflexe,
je ne voit vraiment pas d'ou vient l'erreur, a part peut etre dans mon installation, j'ai installer gtk+-dev-2.10.6, gtk-2_10_3-runtime et gtk_dev_2.10.3. Ne me manquerrait t'il pas qqch, ou les ai je mal installer...???
Pour en etre sur, qq pourrai t'il tester ce prgm plz...
#include <stdlib.h>
#include <gtk/gtk.h>
int main(int argc, char **argv)
{
GtkWidget *pWindow;
GtkWidget *pVBox;
GtkWidget *pImage;
GtkWidget *pQuitImage;
GtkWidget *pQuitBtn;
gtk_init(&argc, &argv);
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
gtk_window_set_title(GTK_WINDOW(pWindow), "GtkImage");
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
pVBox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
/* Chargement d'une image a partir d'un fichier */
pImage = gtk_image_new_from_file("./gtk.png");
gtk_box_pack_start(GTK_BOX(pVBox), pImage, FALSE, FALSE, 5);
pQuitBtn = gtk_button_new();
gtk_box_pack_start(GTK_BOX(pVBox), pQuitBtn, TRUE, FALSE, 5);
g_signal_connect(G_OBJECT(pQuitBtn), "clicked", G_CALLBACK(gtk_main_quit), NULL);
/* Chargement d'une image a partir d'un GtkStockItem */
pQuitImage = gtk_image_new_from_stock(GTK_STOCK_QUIT, GTK_ICON_SIZE_LARGE_TOOLBAR);
gtk_container_add(GTK_CONTAINER(pQuitBtn), pQuitImage);
gtk_widget_show_all(pWindow);
gtk_main();
return EXIT_SUCCESS;
}
Aucun problème avec ce code mais le mieux aurait été que tu donnes le code qui te pose problème, peut-être y'a-t-il quelque chose que tu n'as pas vu, vas savoir !
c'est celui-ci ki me donne pb, normalement il devrait marcher, mais j'ai une croix rouge a la place de l'image...
Et est-ce que tu as essayé avec ce code la manière que je t'ai montré ? Tuas bien mis le fichier PNG dans le même dossier que ton exe ? Une croix rouge indique une erreur de chargement donc au choix, format non supporté ou bien impossible de lire/trouver le fichier !Citation:
Envoyé par gy0m76
Passe le code sur lequel tu as utilisé les fonctions de GDK et aussi ton image, met tout ca dans un zip puis met-le en pièce jointe à ton prochain post, c'est la meilleure façon de t'aider ! Sinon je ne vois pas et peut rien faire de plus :aie:
merci pour ton aide, je te joint mon code et l'image.
ps: mnt je n'est plus la croix rouge, ya plus rien!!!!
En fait chez moi ca fonctionne, que ce soit sous Linux ou Windows mais ca marche, du moins avec la version 2.8.x de GTK+ :lol: :aie:
Juste un truc que j'ai oublié de te dire, quand on créé un GdkPixbuf, une fois qu'il n'est plus utilisé il faut détruire l'objet avec la fonction gdk_pixbuf_unref qui comme seul argument le GdkPixbuf ;)
ok, tu a du ajouter gdk_pixbuf_unref dans ton code pour que ca marche?
Si oui, a kel nivo l'a tu ajouter?
Non je n'ai rien ajouté de plus dans ton code, c'était une simple remarque c'est tout, j'avais oublié de te le dire ;)Citation:
Envoyé par gy0m76
En fait une fois le GdkPixbuf chargé avec succés et une fois inséré dans un autre widget, en générale tu peux directement le détruire, si tu n"est pas sûr du coup tu le fait avant la sortie du main.
ou pui je telecharger la version 2.8 de GTK? et kel version doi je prendre pour le package et le runtime?
Voici ma procédure d'installation sous Windows mais pour Code::Blocks par contre, EDI que je recommande vivement par rapport à Dev-cpp ;)
http://www.developpez.net/forums/sho...15#post1405815
Mais sinon, si tu veux faire l'installation pour Dev-cpp, tu peux désinstaller tes devpacks concernant GTK+ ainsi que les runtimes qui sont installés sur ton "C:\Programs Files\Fichiers communs\GTK" puis aussi de nettoyer ta variable d'environnement PATH, faut supprimer le chemin vers les runtimes GTK+ précédement installé.
Ensuite tu peux installer le runtime dont je donne l'url direct de téléchargement puis et le reste comme indiqué mais je en garantit rien sous Dev-cpp :aie:
ca ne marche tjs pas... :cry: :aie: :cry: :aie:
ya qqch ki m'échappe, et c forcement dans mon installation ou dans la version de GTK
autre petite question, lorsque je fais une saise avec un gtk_entry et ke je veux ensuite inserer celui ci dans un label, les 4 premiers caractères sont des symboles bizare puis le reste est normal
ex: ordinateur
@^~~nateur
d'ou cela peut t'il venir?
Code:
1
2
3
4
5 pEntry[1] = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(pVBoxFrame), pEntry[1], FALSE, FALSE, 0); sText[1] = gtk_entry_get_text(GTK_ENTRY(pEntry[1])); pLabel[1] = gtk_label_new(sText[1]); gtk_box_pack_start(GTK_BOX(pVBoxFrame), pLabel[1], FALSE, FALSE, 0);
Essaye en installant en même temps Code::Blocks tel que je l'ai écrit dans le lien que je t'ai donné ;)Citation:
Envoyé par gy0m76
Comment est déclaré le tableau sText ?Citation:
Envoyé par gy0m76
static const gchar *sText[9];
mais g resolu mon pb, merci qd mm!!!
C'est toujours un plaisir de rien faire :lol: :aie:Citation:
Envoyé par gy0m76
PS: Evite le langage SMS s'il te plaît !
D'accord, j'y penserais dorénavant!!!!
D'ailleurs j'ai un nouveau problème :aie:
Dans mon programme, je veut maintenant effacer ce qui a été saisie dans la variable sText.
Puis-je mettre sText[0] = NULL; ?
Si entre temps le contenu du même GtkEntry à changé oui mais sinon, comme le dit la doc sur le retour de cette fonction:Citation:
Envoyé par gy0m76
donc en somme, c'est un pointeur direct vers le contenu du GtkEntry donc tu peux mettre à NULL le pointeur dans ton tableau (s'il est resté dans la même config que la déclaration que tu m'as montré) mais surtout pas de free sur le pointeur !Citation:
Returns : a pointer to the contents of the widget as a string. This string points to internally allocated storage in the widget and must not be freed, modified or stored.
J'ai installer code blocks comme ceci:
codeblocks-1.0rc2_mingw.exe
atk-dev-1.9.0.zip
cairo-dev-1.0.2.zip
glib-dev-2.8.4.zip
gtk+-dev-2.8.7.zip
pango-dev-1.10.1.zip
gtk_codebloks_template.zip (l'archive.zip sur le blog de gege2061)
gtk-2.8.20-win32-1.exe (mais celui la je ne suis pas sur de l'avoir installer au bon endroit)
Et quand je fais un nouveau projet sur code::blocks, dans GUI je n'est pas GTK+, est-ce normal???