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 :

TPicture, LoadFromStream et JPEG ?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut TPicture, LoadFromStream et JPEG ?
    Bonjour à tous,

    est-il possible de charger un fichier .jpeg depuis un TStream (dans mon cas un TResourceStream) dans un TPicture ?

    Je n'ai trouvé la fonction LoadFromStream que pour les propriétés Bitmap et Graphic.

    Si vous savez comment faire, merci d'avance !

    Neilos

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Par défaut
    Essayer avec un TJPEGImage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Jpeg::TJPEGImage * pJpg = new Jpeg::TJPEGImage();
    pJpg->LoadFromFile(fileName); //ou pJpg->LoadFromStream(...)
    Picture->Image->Assign(pJpg);
    delete pJpg;

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Ok merci beaucoup cela fonctionne.

    Hum peut être saurait tu comment déterminer le type d'une image (sans avoir l'extension du fichier ?).

    Actuellement je procède comme cela :
    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
     try
       {
          picture->Graphic->LoadFromStream( stream );
       } catch ( ... )
       {
             // Si pas GRAPHIC tenter BITMAP
          try
          {
             stream->Seek( 0, soFromBeginning	);
             picture->Bitmap->LoadFromStream( stream );
          } catch ( ... )
          {
                // Si tjs pas OK tenter JPEG
             try
             {
                Jpeg::TJPEGImage *pJpg = new Jpeg::TJPEGImage();
                stream->Seek( 0, soFromBeginning	);
                pJpg->LoadFromStream( stream );
                picture->Assign( pJpg );
                delete pJpg;
             } catch ( ... )
             {
                return ERROR_CODE;
             } // end catch...try
          } // end catch...try
       } // end catch...try
    Mais les exception ça me gène un peu...surtout lorsque je lance mon appli depuis Builder, puisque je vais récupérer une fenêtre d'exception à chaque fois
    Donc si je pouvais déterminer le type à l'avance ou bien rendre ces exceptions là silencieuses sous Builder ça me serait très pratique !

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Par défaut
    Peut être peux tu justement utiliser l'extension du fichier pour éviter dans 90% des cas les exceptions...

    Sinon attention à ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Jpeg::TJPEGImage *pJpg = new Jpeg::TJPEGImage();
    stream->Seek( 0, soFromBeginning   );
    pJpg->LoadFromStream( stream );
    picture->Assign( pJpg );
    delete pJpg;
    si LoadFromStream(stream) déclenche une exception, la mémoire utilisé par pJpg ne sera pas libérée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <memory>
    ...
    std::auto_ptr<Jpeg::TJPEGImage> pJpg (new Jpeg::TJPEGImage());
    stream->Seek( 0, soFromBeginning   );
    pJpg->LoadFromStream( stream );
    picture->Assign( pJpg );

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    C'est vrai j'avais oublié la fuite mémoire. Merci
    Justement je charge depuis des ressources alors l'extension je ne l'ai pas...

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Citation Envoyé par Neilos
    Donc si je pouvais déterminer le type à l'avance ou bien rendre ces exceptions là silencieuses sous Builder ça me serait très pratique !
    Ceci peut-il aider ?
    http://c.developpez.com/faq/bcb/?pag...tionexceptions

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Oui merci beaucoup !
    Je pensais à une solution dans le code lui même mais ça me convient parfaitement !!!!

    ( voila ce que je mérite pour ne pas avoir cherché dans la FAQ)

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

Discussions similaires

  1. [TP] gif et jpeg
    Par vinyl74 dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 22/12/2002, 15h02
  2. TStream & TPicture ...
    Par nut62 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/12/2002, 20h22
  3. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  4. Copier une image (jpeg) dans le presse papier
    Par benj63 dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/07/2002, 14h51
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 20h06

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