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

 Delphi Discussion :

Redimensionnement avant de créer un fichier *.avi


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut Redimensionnement avant de créer un fichier *.avi
    Bonjour à toutes et à tous,

    Avec ce code, le redimensionnement se fait sur les fichiers *.bmp mais pas sur les fichiers *.jpg.

    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
     
     
    .................
     bmp.Width:= Largeur.Value;
     bmp.Height:= Hauteur.Value;
     
     BMP.pixelformat := pf24bit;
     
     for x:= 0 to listeimg.Count -1 do begin
     
     p1.Progress:=x;
     
     if Uppercase(ExtractFileExt(listeimg.Items.Strings[x]))='.JPG' then
     begin
     jpg.LoadFromFile(listeimg.Items.Strings[x]); 
     jpg.PixelFormat:=jf24Bit;         
     
     image1.Picture.Bitmap.Assign(jpg);  
     avirecorder1.AddAVIFrame(image1.Picture.bitmap);
     
     end;
     
     if Uppercase(ExtractFileExt(listeimg.Items.Strings[x]))='.BMP' then
     begin
     bmp.LoadFromFile(listeimg.Items.Strings[x]);
     bmp.Canvas.StretchDraw(rect(0,0, Largeur.Value, Hauteur.Value), bmp);
     avirecorder1.AddAVIFrame(bmp);
     
     end;
     
     end;
     avirecorder1.CloseAVIFile();
    Logique puisque le

    StretchDraw(rect(0,0,Largeur.Value, Hauteur.Value), bmp);
    se fait sur le Bitmap.

    Il y a t'il une solution pour cette partie du code de prendre en compte la valeur (LxH) dans le cas de fichier *.jpg.

    Merci d'avance,

    @+,

    Cincap

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Charge déjà l'image dans un bitmap temporaire et ne travaille ensuite que sur celui-ci.

    De plus dans ton code, tu fixes la taille du bmp mais fait un LoadFromFile par la suite qui remet la taille originale. Le StretchDraw aussi paraît étonnant.
    Il serait également plus logique d'afficher dans le TImage l'image retravaillée pour avoir une vue de l'avi final et non des images de toutes tailles.

    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
    var
      Bmp, AVIBmp :TBitmap;
      Jpg :TJPegImage;
      x :integer;
    begin
     //Image finale à enregistrer
     AVIBmp := TBitmap.Create;
     AVIbmp.Width  := Largeur.Value;
     AVIbmp.Height := Hauteur.Value;
     AVIbmp.pixelformat := pf24bit;
     
     //Image originale
     Bmp := TBitmap.Create;
     
     try
       for x:= 0 to listeimg.Count -1 do
       begin
         p1.Progress := x;
     
         //Une autre façon de faire les IF..THEN
         case AnsiIndexText(ExtractFileExt(listeimg.Items[x]), ['.JPG', '.BMP']) of
           0 : //JPeg
               begin
                 Jpg := TJPegImage.Create;
                 Jpg.LoadFromFile(listeimg.Items[x]);
                 Bmp.Assign(Jpg);
                 Jpg.Free;
               end;
     
           1 : //Bitmap
               Bmp.LoadFromFile(listeimg.Items[x]);
     
           else Raise Exception.Create('Format d''image non supporté !!!');
         end;
     
         //Redimensionnement de l'image
         AVIBmp.Canvas.StretchDraw(rect(0,0, AVIBmp.Width -1, AVIBmp.Height -1), Bmp);
     
         //Affiche l'image redimentionnée
         Image1.Picture.Assign(AVIBmp);
     
         avirecorder1.AddAVIFrame(AVIbmp);
       end;
     
     finally
       avirecorder1.CloseAVIFile;
       Bmp.Free;
       AVIBmp.Free;
     end;
    end;

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut J'ai une erreur !
    @ Andnotor, merci de ton message, après avoir ajouté dans l'Uses l'unité "StrUtils" pour l'instruction "AnsiIndexText", j'ai une erreur sur l'unité de GlAviRecorder après avoir chargé mes jpg :

    En effet je ne sais pas si c'est important mais à la création de la fiche, j'avais ce code afin de créer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     bmp:=TBitmap.Create;
     
     jpg:=Tjpegimage.Create;
     
     img:=0;
     image1.Canvas.Create;
    et :

    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
     
     procedure TFFilmImage.ChargeClick(Sender: TObject);
     begin
     
     if BDImage.Execute then
     begin
     
     if Uppercase(ExtractFileExt(BDImage.FileName))='.JPG' then
     begin
     jpg.LoadFromFile(BDImage.FileName); 
     jpg.PixelFormat:=jf24Bit;           
     image1.Picture.Bitmap.Assign(jpg);  
     
     listeimg.Items.Assign(bdimage.Files);
     
      end;
     
      if Uppercase(ExtractFileExt(BDImage.FileName))='.BMP' then
     begin
     image1.Picture.Bitmap.LoadFromFile(BDImage.FileName);
     
     listeimg.Items.Assign(bdimage.Files);
     
     end;
     end;
     end;
    Je ne comprends pas sauf peut être que le bmp et jpg doivent être créés avant.

    @+,

    Cincap

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Le code que je t'ai donné se charge de créer et détruire les bitmaps, jpegs.
    Si tu en as besoin ailleurs, il est clair que tu dois les créer différemment.

    Maintenant, s'il s'agit uniquement de charger le TImage avec un JPeg, ceci fonctionnera très bien sans objet intermédiaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //LoadFromFile sur Picture qui se chargera de créer 
    //l'objet sous-jacent en fonction du type d'image.
    Image1.Picture.LoadFromFile('image.jpg');
    Image1.Picture.LoadFromFile('image.bmp');

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut Ok tout est bon, tu es un crack !
    @ Andnotor, intéressant ton code avec le case et bien documenté.

    Après compilation, j'ai remarqué que dans le bouton "Sauvegarde" avec ta solution, je n'indiquai pas la création d'avirecorder (avirecorder1.CreateAVIFile(0)) d'ou l'exception.

    Je suis heureux

    Merci beaucoup,

    @+,

    Cincap

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Je vais bientôt demander une participation pour ce soft

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

Discussions similaires

  1. Créer un fichier d'enregistrements
    Par Oregor dans le forum Langage
    Réponses: 19
    Dernier message: 02/06/2012, 20h02
  2. Créer un divx a partir de plusieurs fichiers avi
    Par Vascogil dans le forum Vidéo
    Réponses: 1
    Dernier message: 17/12/2007, 23h45
  3. Créer un fichier avi à partir du flux video d'une webcam
    Par fred7163 dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/03/2007, 11h39
  4. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30
  5. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17

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