begin process at 2008 07 05 05:52:56
1 205 051 membres
37 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RECUPERER LA RESOLUTIONS (WIDTH & HEIGHT) DANS UN FICHIERS AVI


Information sur la source

Catégorie :Multimedia Classé sous : détection, résolution, avi, riff, vidéo Niveau : Débutant Date de création : 28/10/2005 Vu : 3 610

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Bonjour!

Voila certainement un petit truc qui vous plairas, une fonction simple qui permet de recuperer les dimensions d'une video Avi (RIFF).
La fonction est rapide d'execution et fonctionne pleinement (dans le cas seul ou un fichier avi type Riff est lus).

passont au code.

Source

  • {
  • pour commencer créons un type TAviRes qui comporterat 2 integer
  • }
  • type
  • TAviRes = record
  • width,
  • height : integer;
  • end;
  • {
  • Ensuite notre fonction qui vas bien.
  • Fonction GetAviResolution avec un retour de type TAviRes
  • }
  • function GetAviResolution(filename : string) : TAviRes;
  • {
  • AAAH! ma chere fonction SHL8 qui permet convertir une addition d'octets en entier 16bits
  • ici SHL8() est integrée a GetAviResolution(), mais rien ne vous empeche de l'extraire d'ici.
  • }
  • function Shl8(int : integer) : integer;
  • begin
  • { simple comme bonjour! on decale de 8 vers la droite (voir SHL et SHR dans l'aide delphi) }
  • result := int shl 8;
  • end;
  • { declaration des variables }
  • var
  • FOB : file of byte; { on lit des octets, pas des caracteres donc ... file of byte }
  • Oct1,Oct2 : byte; { j'aurais pus faire un tableau array[1..2] of byte mais ... }
  • begin
  • try
  • { on assigne FileName a FOB }
  • AssignFile(FOB,FileName);
  • { on ouvre le fichier }
  • Reset(FOB);
  • { on positionne la lecture a l'offset $40 (hexa) soit l'octet 64 (decimal) }
  • seek(FOB,$40);
  • { on lit les deux octets qui stock la largeur de la video }
  • read(FOB, Oct1, Oct2);
  • { on convertis puis on renvois la largeur dans width }
  • Result.Width := shl8(Oct1+Oct2);
  • { on positionne la lecture a l'offset $44 (hexa) soit l'octet 68 (decimal) }
  • seek(FOB,$44);
  • { on lit les deux octets qui stock la hauteur de la video }
  • read(FOB, Oct1, Oct2);
  • { on convertis puis on renvois la hauteur dans height }
  • Result.Height := shl8(Oct1+Oct2);
  • finally
  • { que ça ce passe bien ou pas on ferme le fichier }
  • CloseFile(FOB);
  • end;
  • end;
  • {
  • Exemple d'utilisation de GetAviResolution()
  • }
  • procedure TForm1.Button1Click(Sender : TObject);
  • { on crée une variable de type TAviRes pour eviter les apels inutile a GetAviResolution }
  • var CurrentAviFile : TAviRes;
  • begin
  • { on ouvre le fichier }
  • if opendialog1.Execute then begin
  • { on recupere la resolution de la video }
  • CurrentAvifile := GetAviResolution(OpenDialog1.FileName);
  • { on affiche la resolution dans un simple TLabel avec Format() }
  • Label1.Caption := format('%d x %d', [CurrentAviFile.Width, CurrentAviFile.Height]);
  • end;
  • end;
{
pour commencer créons un type TAviRes qui comporterat 2 integer
}

type
  TAviRes = record
    width,
    height : integer;
  end;


{
Ensuite notre fonction qui vas bien.
Fonction GetAviResolution avec un retour de type TAviRes
}

function GetAviResolution(filename : string) : TAviRes;
   { 
   AAAH! ma chere fonction SHL8 qui permet convertir une addition d'octets en entier 16bits 
   ici SHL8() est integrée a GetAviResolution(), mais rien ne vous empeche de l'extraire d'ici.
   }
   function Shl8(int : integer) : integer;
   begin
     { simple comme bonjour! on decale de 8 vers la droite (voir SHL et SHR dans l'aide delphi) }
     result := int shl 8;
   end;

{ declaration des variables }
var
  FOB : file of byte; { on lit des octets, pas des caracteres donc ... file of byte }
  Oct1,Oct2 : byte; { j'aurais pus faire un tableau array[1..2] of byte mais ... } 
begin
  try
    { on assigne FileName a FOB }
    AssignFile(FOB,FileName);
    { on ouvre le fichier }
    Reset(FOB);
    { on positionne la lecture a l'offset $40 (hexa) soit l'octet 64 (decimal) }
    seek(FOB,$40);
      { on lit les deux octets qui stock la largeur de la video }
      read(FOB, Oct1, Oct2);
      { on convertis puis on renvois la largeur dans width }
      Result.Width := shl8(Oct1+Oct2);
    { on positionne la lecture a l'offset $44 (hexa) soit l'octet 68 (decimal) }
    seek(FOB,$44);
      { on lit les deux octets qui stock la hauteur de la video }
      read(FOB, Oct1, Oct2);
      { on convertis puis on renvois la hauteur dans height }
      Result.Height := shl8(Oct1+Oct2);
  finally
    { que ça ce passe bien ou pas on ferme le fichier } 
    CloseFile(FOB);
  end;
end;

{
Exemple d'utilisation de GetAviResolution()
}

procedure TForm1.Button1Click(Sender : TObject);
{ on crée une variable de type TAviRes pour eviter les apels inutile a GetAviResolution }
var CurrentAviFile : TAviRes;
begin
  { on ouvre le fichier }
  if opendialog1.Execute then begin
     { on recupere la resolution de la video }
     CurrentAvifile := GetAviResolution(OpenDialog1.FileName);
     { on affiche la resolution dans un simple TLabel avec Format() }
     Label1.Caption := format('%d x %d', [CurrentAviFile.Width, CurrentAviFile.Height]);
  end;
end;

Conclusion

pour l'instant je n'ai pas inclus la verification de signature du fichier AVI ...
donc la fonction peut renvoyer n'importe quoi (0,0 ou pire) si le fichier n'est pas un AVI type RIFF (divx, xvid ect...)
j'essayerais d'ameliorer le tout au fur et a mesure.

(pas de source dispo, inutile pour quelques lignes de codes)

  • signaler à un administrateur
    Commentaire de bbd2 le 31/05/2006 11:13:59

    fonctionne pas :
    erreur ES/32

  • signaler à un administrateur
    Commentaire de bbd2 le 31/05/2006 11:28:29

    plus simple et fonctionne :

    mettre un composant Tmediaplayer sur la fiche.

    Tmediaplayer1.visible:=false;

    dans l'evenement onclick ou autre :

    if OpenDialog1.Execute then
    begin  mediaplayer1.filename:=OpenDialog1.Filename;
      mediaplayer1.Open;  hauteur_video:=mediaplayer1.DisplayRect.Bottom-mediaplayer1.DisplayRect.top;
      largeur_video:=mediaplayer1.DisplayRect.right-
    mediaplayer1.DisplayRect.left;
      mediaplayer1.close;
    end;

    hauteur_video et largeur_video étant bien entendu deux entiers

  • signaler à un administrateur
    Commentaire de jackalunion le 25/06/2008 04:05:16 10/10

    certaines choses oui mais le reste c'est le broulliard

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS