1

GUIでGIF画像を表示しようとしていますが、機能しません。偽の画像(GIFではなく、さまざまな色)が表示されます。

File Exchangeに「アニメーションGIF」があることは知っていますが、他の何かが好きです:/
次のコードを試しましたが、機能しません:

function [] = GUI_400()

     hFig = figure('Name','Simulation Plot Window','Menubar','none', 'Resize','off', 'WindowStyle','modal', 'Position',[300 300 1150 600]);
     movegui(hFig, 'center');

     hAxes = axes('Parent',hFig,'Units','pixels','Position',[362 242 424 359]);  %#   so the position is easy to define
     image(imread('loading.gif', 'gif'),'Parent',hAxes);  %# Plot the image
     set(hAxes,'Visible','off', 'handlevisibility', 'off');          %# Turn the axes visibility off

end

これは私のgif画像です: http ://desmond.imageshack.us/Himg822/scaled.php?server = 822&filename = loadingoz.gif&res = landing

ありがとうございました!

4

2 に答える 2

4

GIF プレーヤーの例を次に示します。

function gifPlayerGUI(fname)
    %# 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);

    %# prepare GUI, and show first frame
    hFig = figure('Menubar','none', 'Resize','off', ...
        'Units','pixels', 'Position',[300 300 imgW imgH]);
    movegui(hFig,'center')
    hAx = axes('Parent',hFig, ...
        'Units','pixels', 'Position',[1 1 imgW imgH]);
    hImg = imshow(img(:,:,:,1), map, 'Parent',hAx);
    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))

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

編集

コメントで述べたように、投稿したサンプル GIF 画像はかなり奇妙です。これを機能させるための変更は次のとおりです。set(hImg,'CData',..)while ループ内で、次の行の直後に追加します。

%# update colormap
n = max(max( img(:,:,:,counter) ));
colormap( info(counter).ColorTable(1:n,:) )
于 2012-06-09T21:17:59.890 に答える
0

このようにgif​​を表示することをお勧めします。このようにして、厄介な while ループがコールバックやその他のコードの実行をブロックすることはありません。

jLabel = javaObjectEDT('javax.swing.JLabel',javaObjectEDT('javax.swing.ImageIcon',which([fname '.gif'])));
[hJ,hC] = javacomponent(jLabel,getpixelposition(hFig).*[0 0 1 1],hFig);
set(hC,'units','normalized','position',[0 0 1 1])
于 2013-08-23T15:54:06.413 に答える