1

ボタン 2 を押して曲線をプロットする MATLAB のインターフェイスがあります。今、図を印刷できません。より正確には、プロットを印刷するための別のボタンを追加したいと考えています。これが私のコードの一部です:

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%clear
%linkdata on
fileName = handles.fileName;

n_var=str2num(get(handles.n_var,'string'));

[x] = readColumns(fileName, n_var);

axes(handles.axes1);
hold on
plot(handles.axes1,x(1:n),'b','LineWidth',2)
hold off

ありがとう。

4

1 に答える 1

1

GUIDE を使用して GUI を作成したように見えるので、同じ方法で (GUIDE を介して) 新しいボタンを追加する必要があります。そのようにしたと仮定すると、そのコールバック関数で次のようなものが必要になります。

function printButton_Callback(hObject, eventdata, handles)
    fileName = handles.fileName;
    im = getframe(handles.axes1);
    %saves the image in variable "im" to a PNG file 
    imwrite(im.cdata, fileName, 'PNG')
end

関数 getframe は、入力ハンドル パラメーター (この場合は軸ハンドル) のスナップショットを取得し、画像データ ("cdata") とフレームに使用されるカラーマップを含む構造体を返します。次に、imwrite を使用して画像データをディスクに書き込みます。ここで、fileName はおそらく必要なファイル名を持つ文字列であり、'PNG' は必要な拡張子を imwrite に指示します (BMP/GIF/JPEG なども使用できます)。

また、ちょっとした問題として、あなたの質問では図とプロットを同じ意味で使用していますが、図はプロットとは異なる可能性があります。つまり、Figure は GUI 全体になり、プロットは GUI の子となる軸上になります。

編集:軸ラベルを保持するには、別の方法を使用する必要がある場合があります。代わりに、次のことができます。

function printButton_Callback(hObject, eventdata, handles)
    fileName = handles.fileName;
    f_tmp = figure('visible', 'off');
    copyobj(handles.axes1,f_tmp);
    print(f_tmp, '-dpng', fileName);
    close(f_tmp);
end

これにより、非表示の図 f_tmp が作成され、handles.axes1 のプロットが非表示の図にコピーされ、文字列 fileName で名前が付けられた PNG ファイル (フラグ '-dpng' で指定、他の拡張子を使用できます) に出力されます。最後に隠れた姿を閉じます。これでうまくいくと思いますが、うまくいかなかったら教えてください

于 2013-02-27T22:51:14.320 に答える