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

Langage Delphi Discussion :

sauver une image en png


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut sauver une image en png
    je fais une capture d'écran avec une ptit fonction trouvée sur le forum...
    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
    procedure CaptureEcran;
     var DtCanvas: TCanvas; Bitmap: TBitmap; Src, Dst: TRect; JPEG: TBitmap;
     begin
      DtCanvas := TCanvas.Create; 
      DtCanvas.Handle := GetDC(0); 
      Bitmap := TBitmap.Create; 
      Bitmap.Height := ProjetVprintPersoft.Height;
      Bitmap.Width := ProjetVprintPersoft.Width;
      Src := Rect(ProjetVprintPersoft.Left, ProjetVprintPersoft.Top , ProjetVprintPersoft.Left + ProjetVprintPersoft.Width , ProjetVprintPersoft.top + ProjetVprintPersoft.height);
      Dst := Rect(0, 0, ProjetVprintPersoft.Width , ProjetVprintPersoft.height);
      Bitmap.Canvas.CopyRect(Dst, DtCanvas, Src); 
      ReleaseDC(0, DtCanvas.Handle); 
      DtCanvas.Free; 
      JPEG := TBitmap.Create;
      JPEG.Assign(Bitmap);
      //ShowMessage(ExtractFilePath(Application.ExeName));
      if not DirectoryExists(RepertoireApplication+'CapturesEcran\')
       then if not CreateDir(RepertoireApplication+'CapturesEcran\')
             then raise Exception.Create('Impossible de créer '+RepertoireApplication+'CapturesEcran\');
      JPEG.SaveToFile(RepertoireApplication+'CapturesEcran\CaptureEcran'+FormatDateTime('yyyymmdd"-"hh"h"mm', Now)+'.jpg');
      JPEG.Free;
     end;
    Est-il possible de sauver l'image dans un autre format pour que ça prenne moins de place? en png ou gif par exemple??

    j'ai vu que plusieurs personne parlait du composant du site http://pngdelphi.sourceforge.net/ mais je n'arrive pas à m'en servir...

    merci d'avance,

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    merci Sub0, je connais la fonction de recherche c'est grâce à ça que j'ai trouvé le 2ème post que tu me donnes dans lequel il parle de PNGImage trouvé sur le site http://pngdelphi.sourceforge.net/

    Donc j'ai téléchargé ça et j'ai dans le zip des fichier .pas et .obj.
    Ce que je voulais savoir c'est comme l'utiliser, l'insérer dans mon projet... ce que je n'ai pas retrouver sur le forum...

    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    merci pour tes conseils, je regarderai ça lundi au boulot...
    en général quand je poste sur le forum j'ai déjà bien chercher avant, j'ai peut-être pas regardé au bon endroit...

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    INSTALLATION DE LA LIB
    - Dans ton projet, ajoute un dossier "obj" avec les fichiers .obj dedans.
    - Toujours dans le dossier de ton projet, ajoute les fichiers pngimage.pas, pnglang.pas et pngzlib.pas.
    - Dans Unit1.pas, ajoute pngimage dans la clause "Uses".

    CREATION DE L'OBJET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Var
      png: TPNGObject;
     
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      png := TPNGObject.Create;
    End;
    CHARGEMENT D'UNE IMAGE - La méthode LoadFromFile de TPNGObject nécessite le chemin complet de l'image source sinon le chargement génère une erreur chez moi. Un TOpenPictureDialog permet justement d'éviter ce petit problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      If Not (OpenPictureDialog1.Execute) Then Exit;
      Try
        png.LoadFromFile(OpenPictureDialog1.FileName);
      Except
        ShowMessage('Erreur de chargement de l''image !');
        Exit;
      End;
    ...
    AFFICHAGE DE L'IMAGE - Il suffit d'assigner la propriété Picture d'un TImage pour afficher l'image source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
      Image1.AutoSize := True;
      Image1.Picture.Assign(png);
    ...
    ENREGISTREMENT DE L'IMAGE - Pour enregistrer une image au format PNG, on utilise la méthode SaveToFile et là aussi, je crois qu'il faut indiquer le chemin complet. Utilise un TSavePictureDialog par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
      If Not (SavePictureDialog1.Execute) Then Exit;
      Try
        png.SaveToFile(SavePictureDialog1.FileName);
      Except
        ShowMessage('Erreur de sauvegarde de l''image PNG !');
      End;
    End;
    Attention tout de même au fait qu'il peut y avoir 2 masques dans une image PNG; Soit le masque alpha, soit le masque opaque, soit les 2. Avec le code que je viens de donner, l'image est inchangée si il s'agit d'une image PNG. Si tu veux savoir comment séparer les masques et les refusionner ensuite, regarde dans ce sujet.

    LIBERATION DE L'OBJET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
      If (png <> Nil) Then FreeAndNil(png);
    End;
    à+


    Lien tout en bas à gauche de cette fenêtre

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    merci Sub0, cool d'avoir pris un peu de ton temps pour me répondre...
    là je pense que c'est bien clair!!
    merci
    greg

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Citation Envoyé par Sub0
    LIBERATION DE L'OBJET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
      If (png <> Nil) Then FreeAndNil(png);
    End;
    C'est quoi l'intérêt du test png <> Nil puisque FreeAndNil vérifie si l'objet existe avant de le libérer

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je me suis trompé, c'est pas FreeAndNil qu'il faut utiliser, mais plutôt la méthode Free de l'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure TForm1.FormDestroy(Sender: TObject); 
    Begin 
      If (png <> Nil) Then png.Free; 
    End;
    à+

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

Discussions similaires

  1. sauver une image bmp
    Par fontome_ 123 dans le forum VB.NET
    Réponses: 4
    Dernier message: 11/04/2008, 18h16
  2. [ImageMagick] Redimensionner une image JPEG PNG GIF
    Par Stouille89 dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 25/08/2007, 21h10
  3. Réponses: 2
    Dernier message: 15/05/2007, 17h45
  4. [MySQL] sauver une image dans la base de donnée?
    Par bebas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/05/2007, 11h26
  5. [C# 2.0] Comment sauver une image dans un fichier Xml ?
    Par Louis-Guillaume Morand dans le forum C#
    Réponses: 4
    Dernier message: 08/09/2006, 17h47

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