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 :

[uigetfile] Comment connaitre le nombre d'images sélectionnées


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [Résolu] uigetfile: Comment connaitre le nombre d'images sélectionnées
    Bonjour tout le monde,

    je suis en train d'utiliser la fonction uigetfile('*.jpg','MultiSelect','on') pour charger des photos dans mon programme et j'ai un souci.

    Le paramètre 'MultiSelect' me permet de donner à l'utilisateur du programme le droit de sélectionner plusieurs images.
    Mais la matrice qui est créé change de nature, me semble t-il, selon qu'il choisira une ou plus d'une image.

    ex:

    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
    >> uigetfile('*.jpg','MultiSelect','on')
    ans = 
        '145520.jpg'    '145602.jpg'    '145612.jpg'
     
    >> size(ans)
    ans =
         1     3
     
    >> uigetfile('*.jpg','MultiSelect','on')
    ans =
    145612.jpg
     
    >> size(ans)
    ans =
         1    10
    La première fois, j'ai une matrice 1*3 avec du texte
    La deuxième fois, j'ai une matrice 1*10... alors que j'ai préféré par exemple une matrice 1*1 avec du texte.

    Avec ce problème je ne peux pas récuperer les images une par une.
    Si j'écris:

    NameOfImages{2}

    Dans un cas, je récupère un mot et dans l'autre une lettre.

    Que puis-je faire?
    Y'a t-il une fonction autre que 'size' qui me donnerai le nombre de files sélectionnés?
    Ou bien une autre façon de lire les noms de fichiers un par un?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Il suffit de tester la sortie (tu es de toute façon obligé de le faire dans le cas de l'annulation) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [filename, pathname]=uigetfile('*.jpg','MultiSelect','on')
    if ~iscell(filename) %a n'est pas un tableau de cellules
        if filename==0
            %annulation
            return
        else
            filename=cellstr(filename);
        end
    end
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par colinette67 Voir le message
    La première fois, j'ai une matrice 1*3 avec du texte
    Non, c'est un tableau de cellules avec 3 cellules.

    Citation Envoyé par colinette67 Voir le message
    La deuxième fois, j'ai une matrice 1*10...
    Non, c'est une chaine de caractères avec 10 caractères.

    C'est clairement ce que dis la documentation de UIGETFILE :
    The output variable FILENAME is a cell array of strings if multiple
    filenames are selected. Otherwise, it is a string representing
    the selected filename.
    L'idée consiste à forcer le premier argument de sortie à être un tableau de cellules avec la fonction CELLSTR :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [fname,pname] = uigetfile('*.jpg','MultiSelect','on');
    fname = cellstr(fname);
     
    for n=1:numel(fname)
        fname{n}
    end
    L'ambigüité est donc levée

    [Edit] Et comme le dit Caro, il faut aussi penser au cas où l'utilisateur clique sur Annuler...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Je teste tout ça tout de suite mais ca m'a bien l'air parfait!

    Merci énormément!

Discussions similaires

  1. Réponses: 31
    Dernier message: 30/09/2006, 22h08
  2. Réponses: 2
    Dernier message: 13/06/2006, 15h46
  3. comment connaitre le nombre de <tr> au sein d'un <table>
    Par pit9.76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/06/2006, 13h27
  4. Réponses: 2
    Dernier message: 05/05/2006, 08h55
  5. comment connaitre le nombre ...
    Par mythtvtalk.com dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/08/2003, 08h18

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