1

私はGUIを作成し、GIFファイルを表示するコード(Amroに感謝)を持っています。

GUIが閉じられるまで、このgifファイルを「hAxes」に表示したい(他のuicontrolで表示する)。

200 個の写真 (image1.jpg、image2.jpg... image200.jpg) を含むフォルダーがあり、これらの画像についていくつかのことを実行します (load1 uicontrol で)。

私は次のようなことを試みます:

hFigure = figure('units','pixels','position',[300 300 424 470],'menubar','none',...
'name','start processing','numbertitle','off','resize','off');        


hAxes = axes('Parent',hFigure,'Units','pixels','Position',[0 112 424 359]);                 

%% これは Amro が gif ファイルを表示するために作成したものです

fname = 'loading.gif';

%# read all GIF frames**
info = imfinfo(fname, 'gif');
delay = ( info(1).DelayTime ) / 100;
[img,map] = imread(fname, 'gif', 'frames','all');
[imgH,imgW,~,numFrames] = size(img);

hImg = imshow(img(:,:,:,1), map, 'Parent',hAxes);
pause(delay)

%# loop over frames continuously
counter = 1;
while ishandle(hImg)
       %# increment counter circularly
       counter = rem(counter, numFrames) + 1;

       %# update frame
       set(hImg, 'CData',img(:,:,:,counter))

       %# update colormap
       n = max(max( img(:,:,:,counter) ));
       colormap( info(counter).ColorTable(1:n,:) )

       %# pause for the specified delay
       pause(delay)
end

%% そしてこれは私のコードの残りの部分です:

set(hAxes,'Visible','off', 'handlevisibility', 'off');
%% loading1 shows a data
loading1 = uicontrol('style','text','unit','pix','position',[0 72 424 40],...
'backgroundcolor','r','fontsize',20);

for i=1:200
    image = horzcat('now processing ', 'image', num2str(i), '.jpg of 200 images')
    set(loading1,'string',image);
    drawnow;
end

しかし、このコードは機能しません: このコードでは、GUI は hAxes を表示します (gif ファイルは正常に動作します) が、GUI は loading1 uicontrol を表示しません。彼に両方 (hAxes と loading1) を表示してもらいたい

つまり、GUI に gif ファイルと 'loading1' uicontrol の両方を表示してもらいたいということです。gifファイルを表示するコードの「while」が原因で、「loading1」が機能していないと思います。

これは私が得たものです:

ここに画像の説明を入力

これは私が取得したいものです:

ここに画像の説明を入力

その後:

ここに画像の説明を入力

その後:

ここに画像の説明を入力

等...

4

1 に答える 1

1

uicontrolgif画像を処理する連続ループの後に呼び出され、フィギュアを閉じた瞬間にのみ呼び出されるため、は表示されないと思います。

コードを使用しuicontrolてループの前に作成すると、期待どおりに機能するようです。

hFigure=figure('units','pixels',...
               'position',[300 300 424 470],...
               'menubar','none',...
               'name','start processing',...
               'numbertitle','off',...
               'resize','off');        
hAxes=axes('Parent',hFigure,...
           'Units','pixels',...
           'Position',[0 112 424 359]); 
% loading1 shows a data
loading1=uicontrol('parent',hFigure,...
                   'style','text',...
                   'unit','pix',...
                   'position',[0 72 424 40],...
                   'backgroundcolor','r',...
                   'fontsize',20);
set(loading1,'string','now loading file 1 of 3');
filename='gif.gif';
% read all GIF frames
info=imfinfo(filename,'gif');
delay=(info(1).DelayTime)/100;
[img map]=imread(filename,'gif','frames','all');
[imgH imgW void numFrames]=size(img);
hImg=imshow(img(:,:,:,1),map,'Parent',hAxes);
pause(delay);
% loop over frames continuously
counter=1;
while(ishandle(hImg))
    % increment counter circularly
    counter=rem(counter,numFrames)+1;
    % update frame
    set(hImg,'CData',img(:,:,:,counter));
    % update colormap
    n=max(max(img(:,:,:,counter)));
    colormap(info(counter).ColorTable(1:n,:));
    % pause for the specified delay
    pause(delay);
end
于 2012-06-15T14:24:08.520 に答える