Bonjour,
Je suis actuellement en train de développer une application permettant de sélectionner des séries d'images DICOM.
Je voudrai que lorsque l'utilisateur séléctionne une (ou plusieurs) série(s) d'images dans une liste box, la ou les séries séléctionnées défilent (j'affiche les images les unes apres les autres grace a la fonction imagesc, et je laisse une pause de 0.01 sec entre l'affichage de chaque image).
Cette fonction est donc située directement dans le callback de ma listebox. Ceci fonctionne tres bien.
Mon probleme est que lorsque qu'un nouveau callback est appelé, intérrompant le défilement de la série d'image, une fois le second callback terminé la série qui était en train de défiler au moment de l'intérruption reprend ou elle s'était arretée....
J'explique un peu mieux le soucis :
- L'utilisateur clique sur une ligne de ma listbox, la série d'image défile
- Si pendant le défilement de cette série l'utilisateur clique sur une autre ligne de la liste box, la nouvelle série défile jusqu'au bout, mais ensuite la premiere série redéfile a partir de l'image ou elle a été interrompue...
- De même si je ferme ma fenetre alors qu'une série est encore en train de défiler, l'affichage se poursuit dans une fenêtre figure qui s'ouvre lorsque la mienne se ferme...
Bref j'espere avoir été assez clair sur mon probleme.
J'ai cherché a le résoudre en utilisant les propriétés interruptible et busyaction de ma listbox mais je n'ai pas réussi a le résoudre..
ci joint la fonction qui pose probleme :
PS :
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 % Function called when the user clicks on the list of slices function SliceSelection_callback(hObject, eventdata) data = guidata(gcf) %Load data structure SelectedSlices = get(hObject,'value'); nFrame = data.Stack.nFrame; %nFrame correspond au nombre d'images dans une série nSlice = length(SelectedSlices); %nSlice correspond au nombre de séries sélectionnées nRow = ceil(sqrt(nSlice)); nCol = ceil(nSlice/nRow); for iFrame=1:nFrame for iSlice=1:length(SelectedSlices) subplot(nRow,nCol,iSlice),... imagesc(data.Stack.Slice(SelectedSlices(iSlice)).Frame(iFrame).Im), colormap(gray),... axis('image','off'); title(['Slice : ' num2str(SelectedSlices(iSlice)) ', Frame : ' num2str(iFrame)]); end pause(0.01); %pause de 0.01 sec entre l'affichage de chaque image end end
J'utilise Matlab en version 7.5, et je programme mon GUI "a la main", en utilisant la méthode "GUIDATA et GUIHANLDES" qui est tres bien décrite dans le tutoriel.
Partager