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

Contribuez Pascal Discussion :

Manipulation des images (JPEG, BMP, PNG...) avec Graphics32


Sujet :

Contribuez Pascal

  1. #1
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut Manipulation des images (JPEG, BMP, PNG...) avec Graphics32
    Bonjour à tous

    On veut manipuler l'affichage d'un paquet d'images de types quelconques.(On doit d'abord télécharger et installer le pack Graphics32 depuis sourceforge).

    Sur une fiche on ajoute:
    -Un composant bitmap32List1
    -Une image32_1 qu'on nomme image32.
    -Trois boutons qu'on nomme respectivement: Suivant,Precedent et ImageNum.
    -Un composant Edit1 qu'on mets son text à 0.

    On clique sur Bitmap32List1, et on ajoute trois items: (Vous pouvez ajouter autant que vous voulez).
    On implémente le bitmap de chaque item par une image (de votre choix).

    On clique sur Image32, et on attribue une même valeur 400 (p.ex) à ses quatre Constraints,
    et smStretch à ScaleMode. // afin de garantir l'uniformité des apparences de toutes les images.
    finalement, on ajoute les codes suivants.

    1-Déclaration de la variable i.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      Form1: TForm1;
      i:integer; //public: pour faire un lien entre les deux codes:SuivantClick(Sender: TObject) et precedentClick(Sender: TObject);
    2-Initialisation de i.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      i:=0; //Initialisation de i avec chaque activation de Form1.
    end;
    3-Afficher l'image Num n.
    Pour afficher l'image Num n, on édite n dans Edit1 puis on clique sur le bouton ImageNum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.ImageNumClick(Sender: TObject);
    begin
      i:=StrToInt(Edit1.Text) ;
      if i<0 then
       Begin i:=0; Edit1.Text:='0' end;
     
     if i>2 then
       Begin i:=2; Edit1.Text:='2' end ;
      image32.Bitmap.Assign(Bitmap32List1.Bitmap[i])  ;
    end;
    4-Avancer d'une image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.SuivantClick(Sender: TObject);
    begin
      image32.Bitmap.Assign(Bitmap32List1.Bitmap[i])  ;
      if i<2 then
       i:=i+1
       else
       i:=0;
    end;
    5-Reculer d'une image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.precedentClick(Sender: TObject);
    begin
     image32.Bitmap.Assign(Bitmap32List1.Bitmap[i])  ;
      if i>0 then
       i:=i-1
       else
       i:=2;
    end;
    NB: Si le nombre Max des Items est 5 (p.ex), vous devez remplacer 2 par 5 dans les codes précédents.

    J'ai ajouté un opendialog1 à ma fiche, et j'ai implémenté un bouton Ajouter qui ajoute des items (en mode RunTime), cependant,
    une fois l'application est ré-exécutée, ces items disparaissent
    ya t-il un moyen de les sauvegarder d'une façon permanente?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm2.AjouterClick(Sender: TObject);
    begin
          if not opendialog1.Execute then
      Bitmap32list1.Bitmaps.Create(Opendialog1,TBitmap32Item) ;
      Bitmap32list1.Bitmaps.Add.Bitmap.LoadFromFile(OpenDialog1.FileName) ;
    end;
    merci à tous.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Citation Envoyé par FOCUS77 Voir le message
    Y a-t-il un moyen de les sauvegarder d'une façon permanente ?
    Vous pourriez mettre les noms des images dans un fichier (un fichier INI par exemple) que l'application lirait à chaque fois qu'elle s'exécute. Les images seraient alors ajoutées à la liste.

    Autre possibilité: mettre toutes vos images dans un même dossier. Lorsqu'elle s'exécute, l'application fouille dans ce dossier et charge toutes les images qu'elle y trouve.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonjour Roland

    J'aimerai bien vous proposer cette méthode.
    Dans le dossier 'C:/Images', j'ai placé des images de type PNG appelées: Image1, Image2, Image3......Imagen. (n<=100).
    et j'ai ajouté les codes suivants:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      Form1: TForm1;
      i,max:integer;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.FormCreate(Sender: TObject);
      var i:integer;str:String;
      begin
        i:=1;max:=0;
        For i:=1 to 100 do
        try
         Str:='C:/Images/Image'+IntTostr(i)+'.png';
         Bitmap32list1.Bitmaps.Add.Bitmap.LoadFromFile(Str) ;
         max:=max+1
        except
          Abort
        end;
      end;
    Comme j'ai modifié les codes précédents:

    1-Avancer d'une image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.SuivantClick(Sender: TObject);
    begin
      if i< max then
       begin
      image32.Bitmap.Assign(Bitmap32List1.Bitmap[i])  ;
      Edit1.Text:=Inttostr(i);
       i:=i+1;
       end
       else
       i:=0;
       end;
    2-Reculer d'une image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.precedentClick(Sender: TObject);
    begin
      if i>0 then
       begin
      image32.Bitmap.Assign(Bitmap32List1.Bitmap[i])  ;
      Edit1.Text:=Inttostr(i) ;
       i:=i-1;
       end
       else
       i:=Max-1;
    end;
    3- Afficher l'image Num n:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.ImageNumClick(Sender: TObject);
    begin
      i:=StrToInt(Edit1.Text) ;
      if i<0 then
       Begin i:=0; Edit1.Text:='0' end;
      if i>=max then
       Begin i:=max-1; Edit1.Text:=inttostr(max-1) end ;
      image32.Bitmap.Assign(Bitmap32List1.Bitmap[i])  ;
    end;
    merci pour votre aide.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Oui, cette méthode fonctionne. Mais on pourrait imaginer une méthode moins rigide, par exemple en utilisant la fonction FindAllFiles() de l'unité FileUtil. Voici un exemple rapide pour montrer le principe :

    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
    var
      Form1: TForm1;
      gIndex: integer;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit1.Text := 'C:\Users\Roland\Pictures\';
      gIndex := 0;
    end;
     
    procedure TForm1.ButtonLoadPicturesClick(Sender: TObject);
    var
      list: TStringList;
      i: integer;
    begin
      list := FindAllFiles(Edit1.Text, '*.bmp;*.jpg;*.png', FALSE);
      Label1.Caption := Format('%d images trouvées', [list.Count]);
      for i := 0 to list.Count - 1 do
        Bitmap32List1.Bitmaps.Add.Bitmap.LoadFromFile(list.Strings[i]);
      list.Free;
    end;
     
    procedure TForm1.ButtonShowNextPictureClick(Sender: TObject);
    begin
      Image32_1.Bitmap.Assign(Bitmap32List1.Bitmap[gIndex]);
      gIndex := (gIndex + 1) mod Bitmap32List1.Bitmaps.Count;
    end;
    En tout cas merci pour votre contribution, qui m'a permis de découvrir la bibliothèque Graphics32, que je ne connaissais pas et qui semble valoir le détour. L'exemple Sprites est impressionnant !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonsoir Roland

    A vrai dire, votre méthode est parfaite mais surtout pratique.

    merci infiniment.
    Cependant la combinaison entre les 2 méthodes à généré une meilleure méthode dont voici les codes:

    1-Déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      Form1: TForm1;
     indexp,indexv,indexr:integer;
    2-Initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormCreate(Sender: TObject);
      begin
      Edit1.Text := 'C:\Images\';
      indexv := 0;
      indexr:=0;
      end;
    3-Chargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.chargementClick(Sender: TObject);
      var
        list: TStringList;
        i: integer;
      begin
        list := FindAllFiles(Edit1.Text, '*.bmp;*.jpg;*.png', FALSE);
        Label1.Caption := Format('%d images trouvées', [list.Count]);
        for i := 0 to list.Count - 1 do
          Bitmap32List1.Bitmaps.Add.Bitmap.LoadFromFile(list.Strings[i]);
        list.Free;
      end;
    4-Avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.suivanteClick(Sender: TObject);
    begin
      Image32.Bitmap.Assign(Bitmap32List1.Bitmap[indexv]);
      indexv := (indexv + 1) mod Bitmap32List1.Bitmaps.Count;
      if indexv=0 then
      edit2.Text:=IntToStr(Bitmap32List1.Bitmaps.Count-1)
      else
      edit2.Text:=IntToStr(indexv-1) ;
      indexr:=indexv-2;
      if indexr<0 then
       indexr:=0;
    end;
    5-Recul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.precedenteClick(Sender: TObject);
    begin
      try
      Image32.Bitmap.Assign(Bitmap32List1.Bitmap[Indexr]);
       Indexr := (Indexr - 1) mod Bitmap32List1.Bitmaps.Count;
      Except
      Image32.Bitmap.Assign(Bitmap32List1.Bitmap[Bitmap32List1.Bitmaps.Count-1]);
      Indexr:=Bitmap32List1.Bitmaps.Count-2
      end;
      edit2.Text:=IntToStr(indexr+1) ;
      indexv:=indexr+2
    end;
    6-Recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.ImageNumClick(Sender: TObject);
    begin
      indexp:=StrToInt(Edit2.Text) ;
      if indexp<0 then
       Begin indexp:=0; Edit2.Text:='0' end;
      if indexp>=Bitmap32List1.Bitmaps.Count then
       Begin indexp:=Bitmap32List1.Bitmaps.Count-1; Edit2.Text:=inttostr(Bitmap32List1.Bitmaps.Count-1) end ;
      image32.Bitmap.Assign(Bitmap32List1.Bitmap[indexp])  ;
      indexv:=indexp+1;
      indexr:=indexp-1;
    end;
    merci beaucoup.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/07/2014, 14h34
  2. Réponses: 6
    Dernier message: 16/11/2009, 08h42
  3. Manipulation d'image 2D bmp avec vc++
    Par Heddou dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 29/04/2008, 22h43
  4. Charger des images JPEG et PNG
    Par crischprolch dans le forum Mobiles
    Réponses: 0
    Dernier message: 21/04/2008, 15h11
  5. manipulation des images Jpeg
    Par tapouni dans le forum C++Builder
    Réponses: 3
    Dernier message: 17/04/2008, 19h49

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