2017-09-14 6 views
0

を印刷に失敗すると.png形式に保存され、数字のシーケンスとしてフレームを生成することにより、簡単なアニメーションを作成する試みである:がここに現在のフィギュア

clc 
clear 
close all 

% don't display plot : produces error. 
%set(0, 'defaultfigurevisible', 'off'); 

% number of frames. 
N = 2; 

% generate data sets. 
x = linspace(0, 6 * pi, 1000); 
y = sin(x); 

% run animation. 
for i = 1 : N 

    % create figure. 
    clf 
    % hold on % produces error. 
    plot(x, y, x(i), y(i), 'ro') 
    % plot(x(i), y(i), 'ro') 

    grid on 
    axis tight 

    title(sprintf('Sine Wave at (%f, %f)', x(i), y(i))) 
    xlabel('x') 
    ylabel('y') 

    drawnow 

    % create frame name: fr00001.png, etc. 
    framename = sprintf('output/fr%05d.png', i); 

    % save current figure in file: output. 
    print(framename); 

end 

しかし、私が得る唯一のものです:

Mesa warning: couldn't open dxtn.dll, software DXTn compression/decompression unavailable
GL2PS error: Incorrect viewport (x=0, y=240883432, width=0, height=240885832)
error: gl2ps_renderer::draw: gl2psBeginPage returned GL2PS_ERROR
error: called from
opengl_print at line 172 column 7
print at line 519 column 14
sinewave at line 48 column 3

お勧めできます。

注:コメント行は意図的に残してあります。後で


1.

は、エンコーダの助けを借りて .avi形式のムービーにステッチされます。助け何

のWindows 10上のOctave-4.2.1上で実行

+1

あなたの質問に関連するforループはありますか? [mcve]を構築してください。私はMATLABでエラーを再現できないことに注意してください。これはGL2PSのバグかもしれません。 – m7913d

+0

私のPC(Windows 7、OctaveのGUI版を使用しています)のOctave 4.2.1でコードのチューンがうまくいきます。私は 'output'ディレクトリを作成しなければなりませんでした。 – am304

+0

@ am304私は現在の作業ディレクトリに 'output'を持っていますが、' .png'ピクチャでは表示されません。画面上で短く点滅し、最後のもの( 'N> 2') 。 – Ziezi

答えて

0

は図を扱うグラフィックスprint()を使用するとの絶対パスを含むファイル名(.png)を定義することですそれらが格納されるディレクトリを指定します。さらに、/ではなく、サブディレクトリが\であることに気づいて、さらに\エスケープ文字を有効にする必要があります。そして、次のコード:

enter image description here


1.それはまだ数百プロットした後、予期せずにクラッシュ:

N = 1000; 
x = linspace(0, 6*pi, N); 
y = sin(x); 

abspath = 'D:\\...\\Project\\output\\'; 
fh = figure(); 

for i = 1 : N 
    clf 
    hold on 
    plot(x, y); 
    plot(x(i), y(i), 'ro') 
    grid on 
    axis tight 
    title(sprintf('Sine Wave at (%f, %f)', x(i), y(i))) 
    xlabel('x') 
    ylabel('y') 
    drawnow 

    framename = sprintf('%sfr%04d.png', abspath, i); 
    print(fh, framename); 
end 

は縫い合わせを与える1000個のフレームを生成します。 magick convert -delay 10 -loop 0 *png output.gif

2.最初の100の.pngファイルは、ImageMagickののコマンドを使用して.gifに変換されます。

+0

適切なImagemagickコマンドはIM 6の場合はmagick、IM 7の場合はmagickに変換されます。すべてのフレームをメモリに読み込んで同じフレーム数のアニメーションを作成しているため、必要なメモリ量が2倍になり、メモリまたはtmp領域が不足する可能性があるため、クラッシュする可能性があります。 – fmw42

+0

@ fmw42この話をありがとう!これは、フレーム作成時、つまりOctaveコード内でクラッシュしています。 – Ziezi

+0

申し訳ありませんが、私はOctaveを知りません、ただImagemagickです。 – fmw42

関連する問題