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 :

probleme avec KeypressFcn


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 77
    Points : 63
    Points
    63
    Par défaut probleme avec KeypressFcn
    Bonjour,

    Je souhaiterai dans un GUI afficher une image ainsi qu'un polygone (ROI) que l'utilisateur pourrait modifier point par point et en utilisant les flèches du clavier pour déplacer l'ensemble de la zone.

    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
     
     
    function pushbutton34_Callback(hObject, eventdata, handles)
    Image=getappdata(gcbf,'Image')
    Position=cell2mat(handles.GestMasque.Coord(get(handles.listbox2,'value')));
    fig = figure;
    b = uicontrol('Position',[100 5 50 40],'String','OK',...
                  'Callback','uiresume(gcbf)');
    set(fig, 'KeyPressFcn', @(fig, evnt)keypress(b, evnt))                            
    imagesc(Image);
    axis image
    caxis([getappdata(gcbf,'Seuilmin') getappdata(gcbf,'Seuilmax')])
    h = drawpolygon('Position',Position);
    setappdata(gcf,'pos',Position);
    setappdata(gcf,'img',Image);
    setappdata(gcf,'Smin',getappdata(gcbf,'Seuilmin'));
    setappdata(gcf,'Smax',getappdata(gcbf,'Seuilmax'));
    guidata(hObject, handles);
     
    uiwait(gcf);
     
     
     
    PosFinale=round(getappdata(gcf,'pos'));
    delete(b)
    delete(fig);
     
     
    function keypress(b, evnt)
     
        cla(b)
        userdata = getappdata(gcf,'pos');
     Image=getappdata(gcf,'img');
    switch lower(evnt.Key)
            case 'rightarrow'
                userdata(:,1)=userdata(:,1)+1;
            case 'leftarrow'
                userdata(:,1)=userdata(:,1)-1;
            case 'uparrow'
            userdata(:,2)=userdata(:,2)-1;
            case 'downarrow'
            userdata(:,2)=userdata(:,2)+1;
        otherwise  
    end
     
    imagesc(Image);
    axis image
    caxis([getappdata(gcf,'Smin') getappdata(gcf,'Smax')])
    h=drawpolygon('Position',userdata);

    Ce code permet à l'utilisateur de bouger la zone avec les flèches du clavier et de mémoriser le résultat (Posfinale) mais je ne sais pas comment mémoriser aussi les changement éventuels qu'il pourrait faire sur un ou plusieurs points du polygone.

    Auriez vous une solution ?

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 77
    Points : 63
    Points
    63
    Par défaut
    Cette solution semble fonctionner ... je sais pas exactement comment :p

    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
    function Postt
     
    Image=importdata('C:\ProgMatlab\DET2018\test\image.mat');
    Position=importdata('C:\ProgMatlab\DET2018\test\Coord.mat');
     
     
    fig = figure;
    b = uicontrol('Position',[100 5 50 40],'String','OK',...
                  'Callback','uiresume(gcbf)');
     
    imagesc(Image);
    axis image
     
    h = drawpolygon('Position',Position);
    set(fig, 'KeyPressFcn', @(fig, evnt)keypress(evnt))  
    setappdata(gcf,'pos',h);
    setappdata(gcf,'img',Image);
    uiwait(gcf);
    h=getappdata(gcf,'pos');
    PosFinale=round(h.Position);
    delete(b)
    drawpolygon('Position',Position);
    drawpolygon('Position',PosFinale);
    function keypress(evnt)
     
     
    h = getappdata(gcf,'pos');
    userdata=h.Position;
     Image=getappdata(gcf,'img');
    switch lower(evnt.Key)
            case 'rightarrow'
                userdata(:,1)=userdata(:,1)+1;
            case 'leftarrow'
                userdata(:,1)=userdata(:,1)-1;
            case 'uparrow'
            userdata(:,2)=userdata(:,2)-1;
            case 'downarrow'
            userdata(:,2)=userdata(:,2)+1;
        otherwise  
    end
     
    imagesc(Image);
    axis image
    h=drawpolygon('Position',userdata);    
    setappdata(gcf,'pos',h);

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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