2012-02-18 6 views
7

MATLABを表示なしでバッチモードで実行すると(たとえば、$DISPLAY UNIX環境変数を設定しないか、起動時にmatlab -nodisplayフラグを使用)、レンダラーopengl 。代わりにpaintersレンダラーを解決する必要があります。例えば:などのパッチ、照明、透明性、と3Dシーンで作業する場合残念ながら、paintersは、多くの場合、悪い結果を与えるOpenGLレンダラをバッチモードで使用すると、すべてのテキストが失われる

>> print -dpng -opengl fig.png 
Warning: OpenGL mode can not be used in terminal emulation mode; ignoring option. 

...ここでアルファが失われた(今のディスプレイを使用して)1つの簡単な例を示します。これらの制限の

peaks 
alpha(0.5) 
print -dpng -opengl peaks_opengl.png 
print -dpng -painters peaks_painters.png 

enter image description here


、私は主に、文書化されていないを見つけることは非常に興奮していました組み込みMATLAB関数と表示されずにopenglレンダラを使用することができます。この機能は、export_fig()という素晴らしい機能の基礎となります。今、バッチモードで高品質の3D数値を非常に迅速に保存できます。

ただし、1つのキャッチがあります。数字がhardcopy()の機能を通過するとすべてのテキストが失われます。

plot(1,1) 
title('TEST') 
>> A = hardcopy(gcf, '-Dopengl', '-r300'); 
Warning: Failed to draw text string 
> In /Applications/MATLAB_R2010b.app/toolbox/matlab/graphics/hardcopy.p>hardcopy at 21 

出力図形が完全に任意のテキスト(ない軸ラベルやタイトルなしダニいない)不足している:

export_fig axis.png -opengl 

enter image description here

をだから私は思ったんだけど何たとえばopenglレンダラをバッチモードでテキストを操作するにはどうすればよいですか?hardcopy()機能で動作するテキストを取得する方法はありますか?おそらく事前にテキストをラスタライズする方法でしょうか?または、テキストのハードコピーとプロットのopenglのコピーを組み合わせる方法はありますか?また、hardcopy()機能とは全く別のルートがありますか?また、Mac OSとUbuntuの両方で再現可能であるため、私のシステム設定では問題は起こりそうもないことに注意してください。

+0

この[Mathworks post](http://www.mathworks.com/matlabcentral/newsreader/view_thread/300393)のテキストフォントが不足していますか? –

+0

@JuanMellado検索していただきありがとうございます。私は前にそのスレッドに出くわしましたが、フォントがここで問題ではないと私は信じています。私は 'listfonts'で自分のフォントを使うことができ、インタラクティブモードとバッチモードの両方でペインタで、インタラクティブモードではopenglでうまくエクスポートできます。私は確信することはできませんが、他のスレッドは2つの別々の問題を混乱させる可能性があります。 –

答えて

8

Linuxを使用している場合は、ソフトウェアOpenGLレンダラー(Matlabの最新バージョンがバンドルされています)を使用できます。 このようなオプションは、少なくとも現在のMatlabバージョンではMac OSでは存在しません。 Windowsは簡単です。バッチモードでもディスプレイが実行されるため、いつものように作業できます。

  1. (仮想)フレームバッファーXサーバーを作成する実行Xvfb :1 &を実行します。
  2. いくつかのファイルにコードを準備し、bla.mを言う:

    opengl software; 
    peaks 
    alpha(0.5); 
    print -dpng -opengl peaks_opengl.png 
    exit 
    

    あなたが想像としてそれは、opengl softwareを忘れないように非常に重要です。

  3. 次のコマンドを実行します。Matlabが仮想ディスプレイ上で、bla.mにどんなのを実行させる、とlog.txtに何Matlab出力を書き込み

    cat bla.m | matlab -display :1 -logfile log.txt 
    

    。すべてが機能しているように見える場合は、ログファイルを削除できます。また、:display :1は、Xvfb呼び出しで指定した番号に一致する必要があります。

  4. 利益。

+0

美しい! 'Xvfb'は私のニーズに完全に合っています。私は前にそれを見つけていないとは信じられません。ありがとう。 –

関連する問題