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

Interfaces Graphiques Discussion :

Afficher une image dans un panel [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 62
    Points
    62
    Par défaut Afficher une image dans un panel
    Bonjour,
    Je débute dans l'utilisation des interfaces graphiques avec Matlab. Pour bien comprendre, je ne veux pas utiliser le GUIDE mais travailler "à la main".
    Pour l'instant j'ai réussi à créer une fenetre contenant un slider avec un indicateur de position (qui varie avec la position du slider) et un panel.
    Je possede une série de 51 images contenues dans une matrice 3D. Je souhaite donc afficher dans le panel l'image correspondant à la position du slider. Ex : si le slider est en position 3, je veux afficher l'image numéro 3... etc
    MAis pour commencer, j'aimerai déjà pouvoir afficher une image (nimporte laquelle) dans le panel mais je n'y arrive pas !
    Est ce que quelqu'un aurait une piste pour m'aider?!
    Merci d'avance

  2. #2
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 62
    Points
    62
    Par défaut
    C'est bon j'ai réussi à afficher une image. Mais maitenant j'aimerai pouvoir afficher l'image correspondant à la position du slider!

    Voila mon code pour l'instant :
    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
    function Create_Mask_GUI
    %Sélection du dossier où se trouvent les images
     
    dossier = uigetdir;
    fichier = uigetfile(dossier);
    image=strcat(dossier,'/',fichier);
     
    infoIm=spm_vol(image);
    matIm=int16(spm_read_vols(infoIm)); 
    matMask = int16(imrotate(matIm,-90)); % 128 x 128 x 51 int16
     
    dim=size(matIm);
    height=dim(1);
    width=dim(2);
    NbSlices=dim(3);
     
    % creation de l'objet figure
     
    fh=figure('units','pixels',...
        'visible', 'on',...
        'position',[250 250 500 500],...
        'color',[0.925 0.913 0.687],...
        'numbertitle','off',...
        'name','[GUI] Test_creation_interface',...
        'tag','interface');
     
    % creation de l'objet slider
     
    sh=uicontrol(fh,'Style','slider',...
                    'Max',NbSlices,'Min',1,'Value',1,...
                    'SliderStep',[0.02 0.1],...
                    'Position',[30 20 150 30],...
                    'callback',@slider_callback);
     
    % creation de l'indicateur texte donnant la valeur du slider
     
    eth= uicontrol(fh,'style','edit',...
        'units','normalized',...
        'position',[0.1 0.2 0.3 0.05],...
        'string',num2str(get(sh,'Value')),...
        'tag','resultat');
     
    % initialisation du Slider sur la coupe numéro 1
    SlideValue=1;
    % Enregistrement direct de SlideValue dans les données d'application de l'objet Figure
    setappdata(gcf,'valeur_de_Slide',SlideValue);
     
    % création panel pour stocker image
     
    ph = uipanel('Parent',fh,'Title','My Panel',...
                 'Position',[.25 .1 0.5 0.8], 'tag','uipanel1');
    % affichage de l'image correspondant à la coupe sélectionnée
    subplot(1,1,1,'Parent',ph); 
    imshow(matMask(:,:,20));
    end
    et la fonction slider_callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function slider_callback (obj,event)
        SlideValue = getappdata(gcbf,'valeur_de_Slide');
        SlideValue = get(obj,'Value');
        h=findobj('parent',gcbf,'style','edit','tag','resultat');
        set(h,'String',num2str(SlideValue));
        setappdata(gcbf,'valeur_de_Slide',SlideValue);
    end

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    image=strcat(dossier,'/',fichier); Comment concaténer le nom d'un fichier et celui d'un répertoire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim=size(matIm);
    height=dim(1);
    width=dim(2);
    NbSlices=dim(3);
    [height width NbSlices] = size(matIm);.

    Pour ce qui est de ce que tu veux faire, il te faut utiliser la handle de l'image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handleIm = imshow(matMask(:,:,20)); % Dans Create_Mask_GUI
     
    set(handleIm,'CData',matMask(:,:,SlideValue)) % Dans slider_callback
    Par contre attention: get(obj,'Value') ne retournera pas un entier dans tous les cas: il te faudra arrondir son résultat.
    Tu peux en plus de cela régler les pas du Slider selon NbSlices:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sh=uicontrol(figure,'Style','slider',...
        'Max',NbSlices,'Min',1,'Value',1,...
        'SliderStep',[1 2]/(NbSlices-1),...
        'Position',[30 20 150 30],...
        'callback',@slider_callback);
    Dernière modification par Invité ; 20/03/2012 à 15h18.

  4. #4
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 62
    Points
    62
    Par défaut
    Merci beaucoup pour ta réponse et tes améliorations de code!
    J'ai testé ce que tu m'as proposé et j'ai l'erreur suivante quand je change la position du slider :
    ??? Undefined function or variable 'handleIm'.
    
    Error in ==> slider_callback at 6
        set(handleIm,'CData',matMask(:,:,SlideValue));
     
    ??? Error while evaluating uicontrol Callback
    Est ce que cela serait du à l'ordre des instructions dans mon code ??

  5. #5
    Invité
    Invité(e)
    Par défaut
    Il te faut faire passer la variable handleIm tout comme SlideValue avec set/getappdata.

  6. #6
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 62
    Points
    62
    Par défaut
    Voila ce que j'ai écris mais j'ai toujours la meme erreur... je crois que je n'ai pas tres bien compris comment utiliser les set/getappdata.

    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
    function Create_Mask_GUI
    %Sélection du dossier où se trouvent les images
     
    dossier = uigetdir;
    fichier = uigetfile(dossier);
    image1=fullfile(dossier,fichier);
     
    infoIm=spm_vol(image1);
    matIm=int16(spm_read_vols(infoIm)); 
    matMask = int16(imrotate(matIm,-90)); % 128 x 128 x 51 int16
     
    [height width NbSlices] = size(matIm);
     
    % creation de l'objet figure
     
    fh=figure('units','pixels',...
        'visible', 'on',...
        'position',[250 250 500 500],...
        'color',[0.925 0.913 0.687],...
        'numbertitle','off',...
        'name','[GUI] Test_creation_interface',...
        'tag','interface');
     
    % creation de l'objet slider
     
    sh=uicontrol(fh,'Style','slider',...
                    'Max',NbSlices,'Min',1,'Value',1,...
                    'SliderStep',[1 2]/(NbSlices-1),...
                    'Position',[30 20 150 30],...
                    'callback',@slider_callback);
     
    % creation de l'indicateur texte donnant la valeur du slider
     
    eth= uicontrol(fh,'style','edit',...
        'units','normalized',...
        'position',[0.1 0.2 0.3 0.05],...
        'string',num2str(get(sh,'Value')),...
        'tag','resultat');
     
    % initialisation du Slider sur la coupe numéro 1
    SlideValue=1;
    % Enregistrement direct de SlideValue dans les données d'application de l'objet Figure
    setappdata(gcf,'valeur_de_Slide',SlideValue);
     
    % création panel pour stocker image
     
    ph = uipanel('Parent',fh,'Title','My Panel',...
                 'Position',[.25 .1 0.5 0.8], 'tag','uipanel1');
    % affichage de l'image correspondant à la coupe sélectionnée
    subplot(1,1,1,'Parent',ph); 
    handleIm = imshow(matMask(:,:,20));
    setappdata(gcf,'image',handleIm);
     
    end

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function slider_callback (obj,event)
        getappdata(gcbf,'valeur_de_Slide');
        SlideValue = get(obj,'Value');
        h=findobj('parent',gcbf,'style','edit','tag','resultat');
        set(h,'String',num2str(SlideValue));
        setappdata(gcbf,'valeur_de_Slide',SlideValue);
        getappdata(gcbf,'image');
        set(handleIm,'CData',matMask(:,:,SlideValue));
        setappdata(gcbf,'image',handleIm);
        end

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu n'as pas écouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function slider_callback (obj,event)
        getappdata(gcbf,'valeur_de_Slide'); %inutile
        SlideValue = round(get(obj,'Value'));
        h=findobj('parent',gcbf,'style','edit','tag','resultat');
        set(h,'String',num2str(SlideValue));
        setappdata(gcbf,'valeur_de_Slide',SlideValue);
        handleIm = getappdata(gcbf,'image');
        set(handleIm,'CData',matMask(:,:,SlideValue));
        setappdata(gcbf,'image',handleIm); % inutile: une fois suffit
    end

  8. #8
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 62
    Points
    62
    Par défaut
    oui je n'avais pas bien compris.. merci pour ton aide !

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

Discussions similaires

  1. Afficher une image dans un cadre (un panel)
    Par Djibson95 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 09/09/2011, 18h58
  2. Afficher une image dans un état
    Par Invité1 dans le forum IHM
    Réponses: 8
    Dernier message: 23/09/2009, 14h59
  3. Afficher une image dans un panel
    Par sys1 dans le forum Débuter
    Réponses: 5
    Dernier message: 09/04/2008, 11h19
  4. Debutant afficher une Image dans un panel
    Par jejermoa dans le forum Graphisme
    Réponses: 5
    Dernier message: 21/03/2008, 11h35
  5. Afficher une image dans un panel ?
    Par Muetdhiver dans le forum wxWidgets
    Réponses: 4
    Dernier message: 03/06/2007, 13h20

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