8

When saving a figure, what function does Matlab use? For example, when a user selects File > Save As... and then selects .png or another image format, what is going on behind the scenes?

I am asking because I am trying to automate saving, but when I use saveas or print, the resulting image is really pixelated. However, the image looks really good when I save the figure using the method described above.

What method should I use to save my figure from the command line? The actual method that the figure window uses would work, but if you guys have better solutions, I'd appricate it!

4

2 に答える 2

9

「名前を付けて保存...」メニュー項目のコールバックは、関数FILEMENUFCNを呼び出します。最初の入力引数はメニューが含まれる図のハンドルであり、2番目の入力引数は文字列'FileSaveAs'です。変数にFigureハンドルが格納されている場合hFigure、次のコマンドは、そのFigureウィンドウの[名前を付けて保存...]メニュー項目をクリックするのと同じです。

>> filemenufcn(hFigure,'FileSaveAs');


いくつかのメモ...

  • 関数FILEMENUFCNは、部分的にしか文書化されていません。コマンドウィンドウで実行できますがhelp filemenufcn、オンラインドキュメントにそのエントリはありません。MATLAB 2009aでは、関数は次のフォルダーにあります。

    C:\Program Files\MATLAB\R2009a\toolbox\matlab\uitools\filemenufcn.m
    

    関数コードを見ると、最終的には.figファイルの場合は関数SAVEASを呼び出すか、他のファイルタイプの場合は関数HGEXPORT(追加の入力引数を含む)を呼び出すように見えます。

  • フィギュアウィンドウとそのメニューの子を検索することで、「名前を付けて保存...」メニュー項目のコールバックを探すことができました。これを自分で行うには、rootプロパティ'ShowHiddenHandles'をに設定し、 GETコマンドを使用してFigureウィンドウとそのメニューのプロパティ'on'をトラバースします。別の方法は、探しているオブジェクトのいくつかのプロパティを知っていると仮定して、 FINDALLコマンドを使用することです。たとえば、これにより、現在のFigureウィンドウの[ファイル]メニューへのハンドルが見つかります。'Children'

    >> hFileMenu = findall(gcf,'Label','&File');
    

    そして、これは「名前を付けて保存...」メニュー項目へのハンドルを見つけて、そのコールバックを表示します:

    >> hSaveAs = findall(hFileMenu,'Label','Save &As...');
    >> get(hSaveAs,'Callback')
    ans =
    filemenufcn(gcbf,'FileSaveAs')
    
于 2010-09-21T18:26:13.227 に答える
2

あなたのことはわかりませんが、私にとって保存された画像は見栄えがします。

コード例:

... create some figure ...
saveas(gcf, 'some_figure.png');

ユーザー指定の解像度を設定するには:

print(gcf,'some_figure','-dpng','-rSOMENUMBER')

ここで、SOMENUMBER は解像度に使用されるパラメーターです。最終的な解像度は (SOMENUMBER*8) x (SOMENUMBER*6) です。

于 2010-09-21T18:25:28.903 に答える