2015-04-21 3 views
1

Я создаю gui, отображающий несколько изображений с подзаголовком, но с большим количеством изображений вам нужно сделать больше осей с подзаголовком, и поэтому изображения становятся все меньше, поэтому я хочу связать слайдер с моими осями, генерируемыми subplot, поэтому я могу сохранить размер изображения и прокрутите вниз между ними есть мой код сейчас:MATLAB - как связать подзаголовки с ползунком?

function pushbutton1_Callback(hObject, eventdata, handles) 
[filename pathname] = uigetfile({'*.*'},'File Selector','MultiSelect', 'on') 
iscellstr(filename) celldata1 = cellstr(pathname) celldata2 = 
cellstr(filename) celldata3 = strcat(celldata1,celldata2) 
subplot(3,3,1),imshow(celldata3{1}) 
subplot(3,3,2),imshow(celldata3{2}) 
subplot(3,3,3),imshow(celldata3{3}) 
subplot(3,3,4),imshow(celldata3{4}) 
subplot(3,3,5),imshow(celldata3{5}) 

и графический интерфейс выглядит следующим образом: http://img.prntscr.com/img?url=http://i.imgur.com/Vt56E6Y.jpg

PS: я хочу использовать сюжетный с ползунком, так что я могу видеть все изображения, пока я прокручиваю, не заменяя каждый раз статическими осями.

ответ

2

Вы должны правильно отформатировать свой код, а не использовать блок-записи, поэтому очень сложно быстро прочитать и понять код.

Чтобы сделать gui с помощью ползунка для изменения нескольких изображений сразу, вам необходимо настроить gui, который вы, похоже, сделали на основе вашего загруженного изображения.

Первое, что нужно сделать, это изменить некоторые свойства ползунка. самый простой способ сделать это дважды щелкнуть ползунок в вашей направляющей фигуры и измените следующие значения:

  • изменить значение переменной на 1.

основная идея следующего кода, когда вы перемещаете ползунок, номер создается на основе позиции, а затем этот номер используется для поиска изображений и отображения правильных.

кнопка вызывает функцию uigetfile, позволяющую выбирать несколько файлов так же, как вы делали это в своем вопросе. он создает два имени файла переменной и имя пути. имя файла - это ячейка с именами всех выбранных вами файлов. вы будете использовать число, основанное на положении ползунка, чтобы определить, какие изображения будут отображаться.

следующий код предназначен для кнопки.

% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 
%global variables allow sharing of variables between functions 
global filename pathname k1 SliderMax SliderMin 

%multi-file selection 
[filename, pathname, ~] = uigetfile({ '*.jpg'}, 'Pick files',... 
'MultiSelect', 'on'); 

%determine the maximum value the slider can be. this value is based on the 
%number of files selected 
%the min value will be set to 1 
SliderMax = length(filename) 
SliderMin = 1; 
set(handles.slider1,'Max',SliderMax); 
set(handles.slider1,'Min',SliderMin); 

%initialise k1 (slider position) since 4 images will be shown k1 needs to 
%be incremented so you show 
%4 different images 
k1 = 1; 
k2 = k1 + 1; 
k3 = k1 + 2; 
k4 = k1 + 3; 

%generating of strings containing the full path to the that will be 
%displayed. 
img1 = strcat(pathname, filename{k1}); 
img2 = strcat(pathname, filename{k2}); 
img3 = strcat(pathname, filename{k3}); 
img4 = strcat(pathname, filename{k4}); 


%assign an axes handle to precede imshow and use imshow to display the 
%images 
% in individual axes. 
axes(handles.axes1); 
imshow(img1); 

axes(handles.axes6); 
imshow(img2); 

axes(handles.axes7); 
imshow(img3); 

axes(handles.axes8); 
imshow(img4); 

следующий код для слайдера

% --- Executes on slider movement. 
function slider1_Callback(hObject, eventdata, handles) 
global filename pathname SliderMax SliderMin 

%put slider postion value into variable k1 
k1 = get(handles.slider1,'Value'); 

%initialise k4 so that it can be used in the if statement for the check. 
k4 = k1 + 3; 


%the if statement below is a check to make sure the value of k4 is never 
%larger than the total number of images, without some sort of check then 
%k4 will exceed the matrix dimensions and give an error. 
if k4 > SliderMax 
    k1 = SliderMax - 3; 
    k2 = SliderMax - 2; 
    k3 = SliderMax - 1; 
    k4 = SliderMax; 
else 
    k1 = floor(k1); 
    k2 = k1 + 1; 
    k3 = k1 + 2; 
    k4 = k1 + 3; 
end 


%generating of strings containing the full path to the that will be 
%displayed. 
img1 = strcat(pathname, filename{k1}); 
img2 = strcat(pathname, filename{k2}); 
img3 = strcat(pathname, filename{k3}); 
img4 = strcat(pathname, filename{k4}); 


%assign an axes handle to precede imshow and use imshow to display the 
%images in individual axes. 
axes(handles.axes1); 
imshow(img1); 

axes(handles.axes6); 
imshow(img2); 

axes(handles.axes7); 
imshow(img3); 

axes(handles.axes8); 
imshow(img4); 
+0

вау спасибо большое! я читаю ваш ответ – Ez0r

+0

mmmm Я новичок в Matlab, к сожалению, похоже, что я не мог правильно следовать за вами, я просто хочу отображать несколько изображений (до 25 или около того), не будучи маленьким, как когда вы используете subplot и с ползунком, который возможен, и я не хочу отображать только одно изображение, как вы сказали, я могу отображать их по диапазонам 3 или 5 без проблем. – Ez0r

+0

это не проблема ... правильно ли моя интерпретация? вы хотите показать одно большое изображение и изменить его с помощью слайдера? – bilaly

Смежные вопросы