IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Image GIF en ressource


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Image GIF en ressource
    Bonjour à tous

    Je cherche à ajouter une image GIF en ressource mon application pour pouvoir la charger ensuite.

    J'ai choisi une GIF car cette image doit avoir un fond transparent.

    J'ai utilisé la même méthode que pour une BITMAP expliqué dans la FAQ en remplacant BITMAP par GIF (Utilisé pour DELPHI)

    et lorsque je veux charger ma ressource, cela me dit Ressource inconnue.

    Merci d'avance pour votre aide

  2. #2
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Personne me peut m'aider ?

  3. #3
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    il faudrait en fait que tu la stock en ressource en tant que RCDATA, puis que tu la retire dans TStream pour finalement la convertir en gif.

    La méthode est assez lourde, mais je l'ai faite pour mettre un jpeg en ressource.
    Faut que je retrouve ca dans mes archives et je te montre.

  4. #4
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    C'est sympa de ta part

    Pour l'instant, j'utilise un TImage dans lequel je charge ma gif dans l'inspecteur d'objet mais le souci, c'est qu'a chaque fois que je réouvre mon projet, il faut aller recharger l'image. C'est un peu chiant.

  5. #5
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    voilà la méthode pour charger le contenu d'un Timage dans la ressource (dans mon cas un bmp):
    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
     
       TMemoryStream *image = new TMemoryStream();
       Image1->Picture->Graphic->SaveToStream(image);
       image->Position = 0;
     
    //procédure de sauvegarde
       AnsiString TempPath,NewPath,OriginalPath;
     
       GetTempPath(200,TempPath.c_str());
       GetTempFileName(TempPath.c_str(), "TMP",0,NewPath.c_str());
       OriginalPath = Application->ExeName;
     
       if(MoveFileEx(OriginalPath.c_str(),NewPath.c_str(),MOVEFILE_REPLACE_EXISTING) == FALSE)
           Application->MessageBox("Impossible de déplacer l'exe","Erreur",MB_OK+MB_ICONWARNING);
       if(CopyFile(NewPath.c_str(),OriginalPath.c_str(),FALSE) == FALSE)
           Application->MessageBox("Impossible de copier l'exe","Erreur",MB_OK+MB_ICONWARNING);
       if(MoveFileEx(NewPath.c_str(),NULL,MOVEFILE_DELAY_UNTIL_REBOOT) == FALSE)
           Application->MessageBox("Impossiblede déplacer la copie","Erreur",MB_OK+MB_ICONWARNING);
     
       DWORD dwFileSize, dwBytesRead,dwBytesWritten;
       LPBYTE lpBuffer;
     
       HANDLE hResource = BeginUpdateResource(OriginalPath.c_str(), FALSE);
       if(NULL != hResource)
       {
           if(UpdateResource(hResource,RT_RCDATA,"IMAGEBMP",MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),(LPVOID)image->Memory, (DWORD)image->Size) != FALSE)
           {
                if(EndUpdateResource(hResource, FALSE) == FALSE)
                    ShowMessage("Error "+IntToStr(GetLastError()));
           }
           else
                 ShowMessage("Error "+IntToStr(GetLastError()));
       }
       delete image;
    Pour le recharger j'ai un peu plus de mal, vu que j'ai chargé un TMemoryStream en ressources, et que je ne peux en tirer qu'un TResourceStream, j'ai encore des erreurs de compilation, mais voilà ou j'en suis. J'ai réussi à la charger en mémoire il doit bien être possible de l'en retirer:
    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
     
       HRSRC hnd = FindResource(  NULL, "IMAGEBMP", RT_RCDATA);
       if(hnd != NULL)
       {
            TResourceStream *Res=new TResourceStream((int)HInstance,"IMAGEBMP",RT_RCDATA);
            //TMemoryStream *image = new TMemoryStream();
            //Res->Read(image,Res->Size);
            Image1->Picture->Graphic->LoadFromStream(dynamic_cast<TMemoryStream>(*Res));
            //TMemoryStream *image = new TMemoryStream();
            //Res->Read(image,Res->Size);
            //image->Seek( 0, soFromBeginning );
            //Graphics::TBitmap *image = new Graphics::TBitmap(Res);
            //Image1->Picture->Bitmap->LoadFromStream(image);
            delete Res;
            //delete image;
     
       }
    Si quelqun sais comment faire, je suis à son écoute.
    Je continu à voir comment faire de mon côté.

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Méthode bourrin, mais qui fonctionne dans un premier temps:
    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
     
       hnd = FindResource(  NULL, "IMAGEBMP", RT_RCDATA);
       if(hnd != NULL)
       {
            //chargement de la ressource
            TResourceStream *Res=new TResourceStream((int)HInstance,"IMAGEBMP",RT_RCDATA);
            TMemoryStream *image = new TMemoryStream();
            //conversion de la ressource en TMemoryStream pour retrouver le même format enregistré
            Res->SaveToStream(image);
            image->Position = 0;
            //sauvegarde de l'image dans un fichier pour la recharger plus facilement
            image->SaveToFile("image1.bmp");
            //supression de l'image et des variables
            Image1->Picture->Bitmap->LoadFromFile("image1.bmp");
            DeleteFile("image1.bmp");
            delete Res;
            delete image;
       }
    A voir pour trouver mieux comme méthode (et ca doit forcément exister )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher tout type d'image (gif ,png, jpg...)
    Par jfb53 dans le forum C++Builder
    Réponses: 22
    Dernier message: 20/07/2005, 14h52
  2. Image GIF a fond transparent dans un formulaire ?
    Par Coquelicot dans le forum IHM
    Réponses: 4
    Dernier message: 25/10/2004, 12h08
  3. [Servlet][Deb]envoyer image gif sur le flux http
    Par ptitBoutchou dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 09/04/2004, 10h12
  4. Commande CONVERT : PDF 2 pages vers 2 images GIF
    Par snoop dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 18/02/2004, 10h20
  5. Réponses: 4
    Dernier message: 14/10/2003, 08h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo