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 :

Comment générer une image dynamiquement ?


Sujet :

Langage Delphi

  1. #1
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut Comment générer une image dynamiquement ?
    Bonjour à tous !
    Je suis nouveau ici et j'aurais besoin de votre aide sur un problème

    Voilà, j'ai une comboxbox qui comporte 3 valeurs, un bouton et une image vide.

    Quand je change ma combobox, en fonction du texte, ça définit un chemin qui sera plus tard le chemin de mon image (en JPG)

    Ensuite, quand je clique sur le bouton, je veux que le chemin que j'ai défini tout à l'heure soit appliqué à mon image.

    Et c'est là que je bloque, je n'y arrive pas

    Voici le source de mon programme :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    unit editeur;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, TeeProcs, TeEngine, Chart, jpeg, ComCtrls,
      ToolWin, ActnMan, ActnColorMaps, ActnCtrls, Menus;
     
    type
      Ts_editeur = class(TForm)
        Textures: TComboBox;
        Generer: TButton;
        Image1: TImage;
     
        procedure GenererClick(Sender: TObject);
        procedure TexturesChange(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      s_editeur: Ts_editeur;
      Chemin : string;
     
    implementation
     
    uses Aide, Apropos;
     
    {$R *.dfm}
     
    // Bouton générer --> génère la map
    procedure Ts_editeur.GenererClick(Sender: TObject);
    var
      Texture : string;
      Image2 : TPicture;
    begin
      Image2 := LoadPicture (Chemin) ;
    	Image1.Picture := Image2;
    end;
     
    // Change le chemin de la texture utilisée pour le terrain
    procedure Ts_editeur.TexturesChange(Sender: TObject);
    var
        Texture : String;
    begin
    Texture := Textures.Text;
    if (Texture = 'Herbe')
    then Chemin := 'textures/terrains/herbe.jpg';
    end;
     
    end.
    Si quelqu'un pouvait m'aider à résoudre ce problème
    Si c'est plus simple, je peux utiliser des bitmap

    Merci d'avance !

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut Re: Générer une image dynamiquement
    Citation Envoyé par K20
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Bouton générer --> génère la map
    procedure Ts_editeur.GenererClick(Sender: TObject);
    var
      Texture : string;
      Image2 : TPicture;
    begin
      Image2 := LoadPicture (Chemin) ;
    	Image1.Picture := Image2;
    end;
    Tu peux faire beaucoup plus simple et probablement plus fonctionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure Ts_editeur.GenererClick(Sender: TObject);
    begin
      Image1.Picture.LoadFromFile(Chemin);
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    ça marche avec des JPG ça ?

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    À partir du moment où tu as mis Jpeg dans les uses, oui
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    écrit plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin:=ExtractFilePath(Application.ExeName)+'\textures\terrains\herbe.jpg';
    (donc avec des backslash au lieu des slash : windows préfère ça)

    Function ExtractFilePath(UnCheminVersUnFichier:string):string;
    retourne le répertoire d'un fichier (je ne sais plus si c'est avec ou sans Bacslash à la fin)

    Application.ExeName renvoie le chemin de ta propre application.

    donc si ton exe se trouve dans c:\Delphi\Projets\ProjetTextures, Chemin sera égal à : c:\Delphi\Projets\ProjetTextures\textures\terrains\herbe.jpg
    Bidouilleuse Delphi

  6. #6
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Ok merci, je vous tient au courant

  7. #7
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Super ça fonctionne
    Merci beaucoup !

    J'ai une autre question : comment faire pour répéter cette image (qui est en faite un motif) dans tout mon TImage ??

  8. #8
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Dans un TImage, tu ne peux pas !

    A la place, tu peux par exemple prendre un TPaintBox, et dans son évènement OnPaint, tu écris ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TMainForm.PaintBox1Paint(Sender: TObject);
    var ABitmap:TBitmap;
    begin
      ABitmap:=TBitmap.Create;
      ABitmap.LoadFromFile(Chemin); 
      Canvas.Brush.Bitmap:=ABitmap;
      Canvas.FillRect(GetClientRect); //rempli la surface avec la brosse en cours (ton image)
      ABitmap.Free;
    end;
    avec ton GenererClick, un poil modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure Ts_editeur.GenererClick(Sender: TObject);
    begin
      PaintBox1.RePaint;
    end;
    Je crois que ça devrait marcher
    Bidouilleuse Delphi

  9. #9
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Super, je vais tester ça merci

  10. #10
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Erf, ile me renvoie une erreur sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Canvas.Brush.Bitmap := mBitmap;
    (j'ai modifié le nom de la variable)
    Il me dit que ce n'est pas le bon format

    J'utilise que des JPG, ça vient de ça ou pas ?

    EDIT : je viens de tester ne mettant mon image en bmp, ça fonctionne mais ça applique la texture sur tout mon programme

    Il n'y aurais pas moyen que ça dessine que dans ma PaintBox et de pouvoir utiliser des JPG ? (car passer de 100ko à 786ko ça fait mal )

    EDIT 2 : de plus, ça me la mes dès le lancement de mon programme

  11. #11
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    ha oui, je ma suis trompé, ça remplie le canvas de ta form...

    Comme ça, ça marche mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TMainForm.PaintBox1Paint(Sender: TObject);
    var ABitmap:TBitmap;
    begin
      if chemin='' then exit;
      ABitmap:=TBitmap.Create;
      ABitmap.LoadFromFile(Chemin);
      PaintBox1.Canvas.Brush.Bitmap:=ABitmap;
      PaintBox1.Canvas.FillRect(GetClientRect); //rempli la surface avec la brosse en cours (ton image)
      ABitmap.Free;
    end;
    Sinon, avec les JPEG, je verrais ça demain si tu veux;
    Bidouilleuse Delphi

  12. #12
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Avec le chargement des JPEG, ça donne ça :
    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
     
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    var AJPEG:TJPEGImage;
         ABitMap:TBitmap;
    begin
      if not FileExists(chemin) then exit; //encore mieux qu'avant...
      AJPEG:=TJPEGImage.Create;
      ABitMap:=TBitmap.Create;
     
      try
         AJPEG.LoadFromFile(Chemin);
         ABitMap.Assign(AJPEG);  //ça "transforme" ton JPEG en Bitmap
         PaintBox1.Canvas.Brush.Bitmap:=ABitMap; 
         PaintBox1.Canvas.FillRect(GetClientRect); //rempli la surface avec la brosse en cours (ton image)
      finally
         //nettoyage après utilisation
        AJPEG.Free;     
        ABitMap.Free;
        PaintBox1.Canvas.Brush.Bitmap:=nil;
      end;
    end;
    Bidouilleuse Delphi

  13. #13
    K20
    K20 est déconnecté
    Membre du Club
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    ça fonctionne nickel !!!
    Merci beaucoup, je vais regarder ton code d'un peu plus près

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

Discussions similaires

  1. Comment générer une image à partir d'un formule Latex
    Par snopims dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 0
    Dernier message: 11/06/2008, 14h01
  2. [JpGraph] pb générer une image dynamiquement
    Par jackseed dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 13/06/2007, 09h37
  3. [Debian 2.4]Lilo: Comment générer une image?
    Par Jean_Benoit dans le forum Administration système
    Réponses: 3
    Dernier message: 15/04/2007, 17h45
  4. [ImageMagick] Comment générer une image d'un code à entrer ?
    Par MiJack dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 16/01/2005, 21h29
  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