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

MATLAB Discussion :

Erreur avec addframe


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut Erreur avec addframe
    Bonjour,
    j'ai différentes courbes que je voudrais afficher image par image dans une vidéo.
    Mes données sont dans une matrice (qui s'appelle d) où les données sont rangées en colonnes (colonne x, puis colonne y courbe 1, re-colonne x, puis colonne y courbe 2 etc...)
    J'affiche donc les courbes une par une sur une figure, et j'utilise getframe et addframe pour les ajouter à la vidéo. Mais voilà, la deuxième image n'a jamais la même taille que la première. Si la première est 435 x 343, la deuxième sera toujours 435 x 344. Donc il me met un message d'erreur.
    Alors j'ai essayé de rajouter une ligne pour fixer la taille de la figure à 435 x 343 juste avant de faire le getframe. Mais là la première figure fait 338 x 277 (??) et la deuxième fait 338 x 278...

    voilà le code :


    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
     
    XMAX=d(1,1);
    XMIN=d(1,1);
    YMAX=d(1,2);
    YMIN=d(1,2);
     
    for i = 1:2:(nbscan*2-1)    %determine les extrema des deux axes
       if (max(d(:,i))>XMAX)    %pour définir l'échelle de la courbe
           XMAX=max(d(:,i));
       end
     
       if (min(d(:,i))<XMIN)
           XMIN=min(d(:,i));
       end
     
       if (max(d(:,i+1))>YMAX)
           YMAX=max(d(:,i+1));
       end
     
       if (min(d(:,i+1))<YMIN)
           YMIN=min(d(:,i+1));
       end
    end
     
      mov = avifile('resultat.avi','Compression','Cinepak');
      mov.fps = 15;
      figure(1)
      for i=1:2:(2*nbscan)
     
     
      axis([XMIN XMAX YMIN YMAX])    
      plot(d(:,i),d(:,i+1))    
      set(gcf,'Position',[200,200,435,343]); 
      F = getframe(gca);
      mov = addframe(mov,F);
     
      end
      close(figure(1))
     mov = close(mov);
    Et voilà le message d'erreur avec la taille du deuxième frame en dessous :

    ??? Error using ==> avifile.addframe>ValidateFrame at 335
    Frame must be 338 by 277.

    Error in ==> avifile.addframe at 196
    ValidateFrame(aviobj,width, height,dims);

    Error in ==> resvid at 59
    mov = addframe(mov,F);

    >> F

    F =

    cdata: [278x338x3 uint8]
    colormap: []
    Si quelqu'un peut m'aider ça me sauve la vie. Ca fait des heures que je cherche...
    J'utilise matlab 7.6.0 (R2008a) avec windows vista

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut oups
    Oups, j'avais mis set(gcf... au lieu de gca...
    J'ai toujours pas la moindre idée de ce que ça veut dire, mais j'ai pas du faire gaffe en recopiant d'un autre code.

    désolé pour ce message inutile...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut Rectifications
    Voilà le code corrigé (pour les copieurs). J'ai pas compris mais ça a l'air de marcher. Et avec la définition des axes après le plot...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i=1:2:(2*nbscan)
      plot(d(:,i),d(:,i+1))   
      axis([XMIN XMAX YMIN YMAX]) 
      set(gcf,'Position',[0,0,435,343]); 
      F = getframe(gcf);
      mov = addframe(mov,F); 
      end
    et un grand merci à moi même qui me suis auto aidé. Non il ne faut pas. Mais si j'insiste.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Une version un peu plus propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fig = figure('Position',[0,0,435,343]); 
    axis([XMIN XMAX YMIN YMAX]);
     
    p = plot(nan,nan);
     
    for i=1:2:(2*nbscan)
      set(p,'xdata',d(:,i),'ydata',d(:,i+1));   
      F = getframe(fig);
      mov = addframe(mov,F); 
    end
    Je pense que le AXIS peut être sorti de la boucle sans problème... à vérifier

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

Discussions similaires

  1. [addframe] Erreur avec AVI
    Par christophe_halgand dans le forum MATLAB
    Réponses: 5
    Dernier message: 02/10/2008, 15h27
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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