Bonjour,
Comment faire pour afficher le plus simplemnt du monde une image jpg disponible sur le WEB a partir d'une application ?
Merci d'avance
Myke
Version imprimable
Bonjour,
Comment faire pour afficher le plus simplemnt du monde une image jpg disponible sur le WEB a partir d'une application ?
Merci d'avance
Myke
Bonjour ! :D
Tu peux utiliser un composant TNMHTTP un composant TImage et un objet TJPEGImage :
A+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 TNMHTTP NMHTTP1 = new TNMHTTP(NULL); TJPEGImage * JpgImg = new TJPEGImage(); TImage * Img = new TImage(Form1); Img->Parent = Form1; //Initialisation du NMHTTP NMHTTP1->InputFileMode = true; //sauver les fichiers sur le disque //Download dans repertoie temporaire de Windows NMHTTP1->Body = TEMP + "\\temp.jpg"; //corps du fichier NMHTTP1->Header = TEMP +"\\tmphdr"; //hjeader du fichier //Recuperation du fichier sur le web NMHTTP1->Get("http://www.automobile-sportive.com/guide/citroen/axsport/axsport-guide.jpg"); //Chargement de l'image Jpg Jpg->LoadFromFile( TEMP + "\\temp.jpg"); //Suppression des fichiers temporaires DeleteFile( TEMP + "\\temp.jpg"); DeleteFile(TEMP +"\\tmphdr"); //Conversion de l'image en bitmap et affichage a l'ecran Image1->Picture->Bitmap->Assign(Jpg); //nettoyage delete NMHTTP1; delete Jpg;
Je suis tout a fait d'accord pour le code que tu as donné jusqu'au http->Get (...)
Par la suite il me semble que tu ne peux pas charger ton image en écrivant du code juste derriere mais en utilisant les evenement OnSuccess() et OnFailure() du composant.
Il me semble en effet que la méthode Get() doit fonctionner en mode asynchrone et doit lancer un thread oun qqch du genre ce qui fait qu'il ne s'arrete pas dessus et continue a executer la suite du code (donc un chargement d'image qui n'a pas encore été téléchargée).
Je me souviens avoir eu un pb comme ca en tous cas, et il fallait donc passer par les evenements.
Oui je pense que pour une image assez grosse cela doit poser problème (ça passe sans problème avec celle de l'exemple... :) ).
si le problème se pose alors tu as raison il vaut mieux faire comme cela :
etCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 TNMHTTP NMHTTP1 = new TNMHTTP(NULL); TJPEGImage * JpgImg = new TJPEGImage(); TImage * Img = new TImage(Form1); Img->Parent = Form1; //Initialisation du NMHTTP NMHTTP1->InputFileMode = true; //sauver les fichiers sur le disque //Download dans repertoie temporaire de Windows NMHTTP1->Body = TEMP + "\\temp.jpg"; //corps du fichier NMHTTP1->Header = TEMP +"\\tmphdr"; //hjeader du fichier NMHTTP1->OnSuccess = SuccessDwldImage; //Recuperation du fichier sur le web NMHTTP1->Get("http://www.automobile-sportive.com/guide/citroen/axsport/axsport-guide.jpg");
Bien vu... :wink:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 void __fastcall TForm1::SuccessDwldImage(CmdType Cmd) { if(Cmd == cmdGET) { //Chargement de l'image Jpg Jpg->LoadFromFile( TEMP + "\\temp.jpg"); //Suppression des fichiers temporaires DeleteFile( TEMP + "\\temp.jpg"); DeleteFile(TEMP +"\\tmphdr"); //Conversion de l'image en bitmap et affichage a l'ecran Image1->Picture->Bitmap->Assign(Jpg); } }
Voila exactement :D
Avec un ptit OnFaliure() en plus pour afficher un msg d'erreur en cas de ratage du download et tou est parfait :wink:
Mais tout à fait mon cher .:morgoth:. j'aurais pas mieux dit... :wink:
Merci pour vos reponses, cela m'a été d'une grande aide.
Merci encore
++
Myke
Salut
je n'ai pas trop biencompris
donc si quelqu'un pourait me mettre un exemple simple et complet ca serai sympa car avec l'exemple ici je ne sais pas les include à faire et ou mettre ces bout de code.
MErci
8O
crée un bouton et place le 1er code dedans
le 2iem code dans l'inspecteur d'objet dans evenementtu devrais retrouver
la nom de la2iem fonction , tu cliques 2 fois et tu place le 2iem code
puis tu executes !
@+
quand je fait cela j'ai plein d'erreur.
Si ca ne te derange pas pourait tu me compresser un projet bidon fesant ceci
Merci