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 :

Possibilité d'enregistrer un TImage ?


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut Possibilité d'enregistrer un TImage ?
    Bonjour,

    Voila mon problème, je devellope avec borland C++ builder 6 une application qui aurait pour but de redimensionner une image.
    J'arive bien à afficher mon image (avec un TImage) en utilisant la fonction LoadFromFile de la Propriété Picture de TImage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1->Image->Picture->LoadFromFile((ParamStr(1)));
    Ce que j'aimerais pouvoir faire à présent est récupérer l'image affichée ou encore redimenssioné la Picture de Timage.

    Est ce possible ?

    D'avance merci

  2. #2
    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
    Regarde dans l'aide tu trouveras la méthode SaveToFile de TPicture.

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    J'ai deja regardé et comme tu dit la méthode SaveToFile appartient à TPicure et lorsqu'on sauvegarde l'image elle fait la taille de l'image ouverte par LoadFromFile, ce que j'aimerais faire et pouvoir sauvegarder l'image affichée (TImage), c'est a dire l'image d'origine mais retouché (redimensioné surtout)

  4. #4
    Membre éprouvé
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Par défaut
    Bonjour,

    Malheureusement pour toi, le TImage ne retouche pas l'image, il agrandit seulement l'espace d'affichage ... pour modifier l'image en elle même il va falloir que tu opères directement sur la matrice de l'image !! et là tout dépend du format ( jpg,bmp,gif, etc ...)

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut


    Donc si je comprend bien la seul façon pour pouvoir redimenssioner une image quelque soit son extension (j'entend ici les formats les plus connus) il va me faloir une bibliothèque ?

    Quelqu'un en connait t'il une effice dans la redimension ?

    Merci pour l'aide et merci pour les réponses

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Par défaut
    j'ai pas trés bien compmris ton problème, mais pourquoi ne changes tu pas la dimension de ton image directement sur un logiciel graphique.?

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Tu peux copier l'image redimensionnée dans un bitmap et en sauvegarder le contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
    Par exemple, copier-coller depuis la zone client de l'image (son stretch est
    fixé à true et ses dimensions sont celles de l'agrandissement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int we = Image1->Width;
    int he = Image1->Height;
    Bitmap->Width = we;
    Bitmap->Height = he;
    TRect R = Rect(0, 0, we, he);
    Bitmap->Canvas->CopyRect(R, Image1->Canvas, R);
    Bitmap->SaveToFile(...);
    Ou bien directement si le graphique le permet, comme ici Picture->Bitmap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Graphics::TBitmap *B = Image1->Picture->Bitmap;
    Bitmap->Width = (B->Width * zoom) / 100;
    Bitmap->Height = (B->Width *zoom) / 100;
    TRect R = Rect(0, 0, Bitmap->Width, Bitmap->Height);
    Bitmap->Canvas->StretchDraw(R, B);
    Bitmap->SaveToFile(...);
    S'il y a plus simple, je ne connais pas la méthode !

    A plus !

  8. #8
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    Voila ma situation, je suis stagiaire et on me demande de créer un programme qui ajoute une option au menu contextuel du click droit et qui redimmensionne une image, puis qui l'uploadera.

    Or je pense que le mieu est de travailler sur l'image, la redimensioner puis l'enregistrer de facon a ce que l'envoi soit plus simple.

  9. #9
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    Bonjour henderson,

    J'ai essayé ta première solution pour l'instant et deux probleme se posent:
    - Si l'image d'origine n'est pas un *.bmp cela entraine un message d'erreur : "Une image ne peut être modifié que si elle contient un bitmap"

    - Lorsque l'image d'origine est un *.bmp cela fonctionne mais je n'ai pas une image redimenssioné mais tronqué depuis le coin haut-gauche.

    Je pourrais essayé le zoom mais le problème mon image de sortie doit avoir une "widht" definie.

  10. #10
    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
    Hmm pour faire quelque chose de qualité mieux vaut éviter le StretchDraw...
    tu as besoin d'une bonne qualité ou non ? Si oui il va falloir recoder un algorithme de redimensionnement (ça se trouve sur le net).

    Sinon oui la classe Graphics::TBitmap ne permet de charger que des bitmaps..

    Pour charger une JPEG il faut la charger dans un TPicture et ensuite la copier dans un Graphics::TBitmap pour ensuite pouvoir travailler dessus.

    Pour l'enregistrer à nouveau en JPEG il faut de nouveau repasser par un TPicture, dans l'autre sens cette fois.

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Pour la première solution, il faut que l'image (TImage) ait les dimensions en rapport avec
    le redimensionnement, ce que j'ai indiqué.
    C'est le canvas de l'image qui est sollicité et non celui de l'un des objets de Picture du TImage.

    Pour la deuxième solution j'ai bien précisé pour l'objet Bitmap de Picture.

    Ma version BCB3 Pro ne prend pas en compte les images compressées !

    A plus !

  12. #12
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    Merci pour les conseils, mais de toute facon si je ne peut que gerer les bmp et jpeg ca va etre un peu dur, je vais poster un nouveau message pour voir si quelqu'un connait une bibliothèque gérant les principaus formats d'image et permettant leur redimension.

    Je pense par example a ImageMagick mais je n'arive pas a l'installer sous Borland.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2010, 13h13
  2. Réponses: 2
    Dernier message: 14/01/2009, 14h21
  3. Réponses: 7
    Dernier message: 02/07/2007, 14h07
  4. Réponses: 2
    Dernier message: 11/02/2007, 11h30
  5. Réponses: 6
    Dernier message: 01/09/2006, 09h35

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