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

C++Builder Discussion :

Redimensionner une vidéo l'afficher dans un Panel


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut Redimensionner une vidéo l'afficher dans un Panel
    Bonjour à tous

    Je souhaite dans mon programme afficher une vidéo dans un Panel.
    Or, ma vidéo est plus grande ent aille que le Panel.
    Donc quand je met Mediaplayer->Diaplay = Panel;

    j'ai juste le coin supérieur gauche de ma vidéo tenant dans le Panel.

    Moi ce que je voudrais, c'est que ma vidéo soit visible en entière sans qu'elle soit rogné.

    Car j'ai aussi utiliser la méthode suivante mais qui ne me donne pas le résultat espéré car j'ai bien le centre de ma vidéo mais les bords sont rognés.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       MediaPlayer1->Display = PanelVideo;
       TRect rect = MediaPlayer1->DisplayRect;
       rect.Left=(PanelVideo->Width-rect.Width())/2.0;
       rect.Top=(PanelVideo->Height-rect.Height())/2.0;
       MediaPlayer1->DisplayRect = rect;
    Quelqu'un aurait-il une solution

    Merci d'avancea

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    liste des includes à trier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //---------------------------------------------------------------------------
    //   Include
    //-----------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <vcl/math.hpp>
    #include <vcl/filectrl.hpp>
    #include <stdio.h>
    #include <ShellApi.h>
    #include <vcl/dstring.h>
    #include <Vfw.h>
    #include <windows.h>
    #include <stdlib.h>
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    //---------------------------------------------------------------------------
    // boite de dialogue et attribution de valeur
    //-----------------------------------------------------
    void __fastcall TForm1::BtAviSelectClick(TObject *Sender)
    {
                //On initialise la bibliothèque
    AVIFileInit();
    PAVIFILE pFile;
     
     
    OpenDialog1->Execute();
    OpenDialog1->FileName;
    Memo1->Lines->Add(OpenDialog1->FileName);
    NomAvi=OpenDialog1->FileName;
    ComboBox2->Items->Add(NomAvi);
     
     
     
    AnsiString PathVideo = NomAvi ;
    char * pPath = PathVideo.c_str();
    //On ouvre la vidéo dont le path est pPath et on la place dans le buffer pFile
    AVIFileOpen(&pFile,pPath,OF_SHARE_DENY_WRITE,NULL);
     
    //Déclaration d'une structure AVIFILEINFO qui contient les infos de la vidéo
    AVIFILEINFO pFileInfo;
     
    //On récupére les infos dans pFileInfo
    AVIFileInfo(pFile,&pFileInfo,sizeof(pFileInfo));
     
     
    int Duree = pFileInfo.dwLength;
    int Largeur = pFileInfo.dwWidth;
    int Hauteur = pFileInfo.dwHeight;
    int Scale = pFileInfo.dwScale;
    int Rate  = pFileInfo.dwRate;
    int Temps = Duree*(Scale/1000)/(Rate/1000);
     
     
       AnsiString Infos  ;
       Infos = NomAvi  ;
       Infos += " ( ";
       Infos += Largeur;
       Infos += " x ";
       Infos += Hauteur;
       Infos += " ) ";
       Infos += Temps ;
       Infos += " secondes ";
     
    Memo3->Clear() ;
    Memo3->Lines->Add(Infos);
     
     
     
     
     
     
        // lancement auto du media apres selection
     
     
     
        TRect rec;
        rec.Left=0;
        rec.top=(AviPanel->Height-AviPanel->Width*Hauteur/Largeur)/2-6;
        rec.Bottom= AviPanel->Height-((AviPanel->Height-AviPanel->Width*Hauteur/Largeur)/2)-6  ;
        rec.right=AviPanel->Width;
     
        MediaPlayer1->DeviceType = dtAutoSelect;
        MediaPlayer1->FileName =  NomAvi;
        //"c:\\test.avi";
        MediaPlayer1->Display = AviPanel;
        MediaPlayer1->Open();
        MediaPlayer1->DisplayRect=rec;
        MediaPlayer1->Play();
     
     
    //Permet de quitter un AVI ouvert
    AVIFileRelease(pFile);
    //On ferme la bibliothèque AVI
    AVIFileExit();

    voilà comment obtenir des infos sur l avi
    apres recup et traite ton rect ou panel en fonction de celles ci

    apres tu peux faire un bouton pour plein ecran basé sur les valeurs de ta resolution d ecran

    et aussi tu peux t amuser à un code pour afficher les controles selon la position du curseur quand tu es en plein ecran

  3. #3
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci à toi cedni

    En fait je ne veux pas adapté mon Panel à ma vidéo, c'est l'inverse que je veux faire car le panel dans lequel je veux afficher la vidéo est plus petit que la vidéo.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    t as pas essayé avec un fichier html local qui recoit le nom de la video en variable ?

    si t arrives pas à envoyer la variable , fais la generer par un code envoyer dans un fichier txt puis renommer automatiquement quand tuveux lire une video

    par contre je sais pas si le composant tcpbrowser peut lire les videos

    si oui tu peux sans probleme imposer la taille de la fenetre de lecture en html

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Excuse moi mais je ne voit pas ce que l'HTML viens faire ici, vu que je développe en C++.

    Par contre une petite précision

    En fait ce que je cherche à faire, c'est la même chose que pour une image avec la propriété Proportional à true, c'est à dire faire tenir ma vidéo dans mon Panel sans distortion ni rognage.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    je te proposais juste de contourner le probleme
    vu qu en html la taille de la video s adapte

    tcpbrowser est un composant de borland

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    <img dynsrc="C:\film.avi" start=mouseover width=240 height=180" loop=infinite>

  8. #8
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    la première méthode que tu m'a exposé marche quasiement mais j'ai du mal a comprendre les formules que tu utilise.

    Tu pourras rapidement me les expliqué

    Sinon pour le HTML, je n'ai pas encore testé. Mais le problème c'est que je gère le clavier en même temps, je ne sais pas si du coup cela fonctionnera toujours.

    Merci d'avance

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    si tu parles des divisions par 1000

    c est les chiffres qui sont trop grand pour etre utiliser dans l operation

    d où plantage

    qu est ce qui te tracasse ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    sinon ouvres avec le bloc notes le fichier vfw.h situé dans le dossier include

    recherche ca " Structures used by AVIStreamInfo & AVIFileInfo."

    tu tombes sur la ligne 1804

    vas à la ligne 1931

    et là les parametres sont expliqués

  11. #11
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Je me suis mal exprimé, dsl

    C'est les formules de calcul des coordonnées des points pour le rectangle du Mediaplayer qui me pose problème. La récupération des informations de mon avi, il n'y a pas de problème.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    le - 6 , c est pour corriger un prob à la maison


    c est des produits en croix
    largeur du rect / hauteur du rect = Largeur / Hauteur

    je traite

    le ratio du rect ( en attribuant la largeur du panel au rect )

    par rapport

    au ratio de la video grace aux infos de la video ( Largeur / Hauteur )

    le /2 , c est pour que dans le panel , l avi soit centré verticalement

    mais le code est mal ecrit , j ai du faire une betise avant d enregister le projet , je regarderais celà ce soir

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    en fait

    la hauteur du panel - la hauteur de l avi = 2 bandes noires collées

    il faut donc repartir cet espace en haut et en bas

    d où le /2 dans le calcul de coordonnées

  14. #14
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    En fait j'ai refait les formules moi même et j'arrive à ce que je voulais faire mais il y a un truc que je ne comprends pas.

    Largeur et Hauteur sont les données récupérées des infos de la vidéo

    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
     
       // On calcule le ratio
       float Ratio = float(Largeur) / float(Hauteur);
     
       // on calcule la hauteur de la vidéo dans le Panel
       // pour qu'elle ne soit pas déformée.
       float H = float(panImg->Width) / Ratio;
     
       // On défini le display du médiaplayer
       MediaPlayer1->Display = panImg;
     
       // On définni le rectangle d'affichage du médiaplayer
       TRect rect = MediaPlayer1->DisplayRect;
     
       rect.Left = 0;
       rect.Top = (panImg->Height - H) / 2;
       rect.Right = panImg->Width;
       rect.Bottom = panImg->Height - (rect.Top * 2);
     
       MediaPlayer1->DisplayRect = rect;
    Ce que je comprend pas c'est que si je respecte la formule, normalement pour le rect.Bottom, on doit retrancher qu'une fois rect.Top. Or si je le retranche une seule fois, il n'y a pas de bande noir en bas. Cette bande noir apparait que si je le retranche 2 fois.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    lol

    j ai rencontré des problemes aussi à l epoque

    je v tester

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     rect.Left = 0; 
       rect.Top = (panImg->Height - H) / 2; 
       rect.Right = panImg->Width; 
       rect.Bottom = panImg->Height - (rect.Top * 2);
    donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     rect.Left = 0; 
       rect.Top = (panImg->Height - H) / 2; 
       rect.Right = panImg->Width; 
       rect.Bottom = H ;
    ce qui est normal
    c est bien ce qu on souhaitait

    le panel - deux bandes d où le *2
    mais je pense que le bottom est relatif au top et non pas au panel , tu me suis ? ( top = coordonnee , bottom = norme du segment vertical )

    parcontre tu travailles avec quels codecs ?
    j ai des soucis au niveau de la lecture
    ca lit beaucoup trop vite et sans son maintenant

    t as pas une idée

  17. #17
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Je viens d'essayer avec Bottom = H et c'est bon.

    C'est vraiment bizard que le Bottom correponde en fait au Height. mais bon du momen que ca marche, c'est le principal

    Pour le codec, moi je lis avec Xvid. Au départ on lisait du divx mais avec la version 6 il n'y a ni image ni son donc on a réencodé nos vidéo en xvid

    C'est bizard que ca lise trop vite. Tu referme bien ton AVIFILE avant de lire la vidéo ??

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Permet de quitter un AVI ouvert 
    AVIFileRelease(pFile); 
    //On ferme la bibliothèque AVI 
    AVIFileExit();
    je finis par ca

    ca devrait etre bon mais non

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    parcontre t as des notions avec les stream et la webcam ?

  20. #20
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Pour femer le fichier, tu me l'avais déja montré dans un précédent de tes posts. Mais moi ce que je te disait, c'était de faire ça avant de lancer la vidéo dans le médiaplayer car dans l'exemple que tu m'as donné, tu le fermais tout à la fin.

    Sinon concerant les stream et les webcam, dsl, je ne peux pas t'aider.
    Par contre si tu as des infos, je suis preneur.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Modifier le contenus d'une table Access affiché dans un FlexGrid
    Par Agrume-Framboise dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 07/06/2007, 08h37
  2. Google Analytics sur une page non affichée dans un navigateur
    Par Fdescamps dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/06/2007, 08h18
  3. Réponses: 1
    Dernier message: 03/04/2007, 08h57
  4. Rechercher une date et afficher dans un formulaire
    Par gadjou dans le forum Access
    Réponses: 3
    Dernier message: 03/08/2006, 11h44
  5. Rafraîchir une Image (reload) affichée dans un panel
    Par svirlot dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 09/05/2006, 11h23

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