Matlab GUI教程0x7–GUI中保存GUI中的Plots图形

6,649次阅读
没有评论

共计 2768 个字符,预计需要花费 7 分钟才能阅读完成。

本节教程将向您演示如何将GUI的坐标系(axes)上显示的图像、图片和曲线保存为图像文件

这个功能对GUI的终端用户很helpful,因为我们可以将结果直接保存下来,而不需要频繁的运行程序。很不幸的是,MATLAB没有提供直接的函数或操作,让来来执行这个任务。

自己动手丰衣足食,好,下面演示的实例将让您美梦成真!自由保存GUI坐标系上的图形!

因为本节教程需要您具备一定能够Matlab基本知识和必要GUI经验,故再进行本教程之前,如果您是GUI刚入门菜鸟,建议您先看下:

1、GUI入门指导实例教程 http://www.matlabsky.com/thread-5217-1-1.html
2、handles结构体简介 http://www.matlabsky.com/thread-5223-1-1.html
3、在GUI中实现数据共享和传递

OK,Let’s Begin Now!

1、下载本教程中使用到savePlotWithinGUI.m Matlab GUI教程0x7--GUI中保存GUI中的Plots图形 savePlotWithinGUI.m (1.81 KB, 下载次数: 680)

下面我对本函数大概介绍下,并在代码上给出注释:

代码的原理很简单,就是使用Matlab自带的copyobject函数,将想要保存的坐标系上的图形拷贝到一个新的figure中,然后使用saveas命令保存这个新figure的内容。

当然在拷贝的时候要注意调整新figure的相关属性,比如单位、位置等。

(1)函数具有两个输入参数axesObject和legendObject,其中后者是可选的
(2)axesObject是GUI中坐标系的句柄,legendObject是您使用legend函数创建的图例说明的句柄

  1. %created by: Quan Quach
  2. % commented by: dynamic
  3. %date: 11/8/07
  4. %function to save plots within a GUI
  5. function savePlotWithinGUI(axesObject, legendObject)
  6. % 将GUI坐标系上的图形保存为图像文件
  7. %
  8. % 参数说明
  9. % axesObject 希望被保存的axes对象的句柄 (必须)
  10. %legendObject 由legend函数创建的图例说明的句柄 (可选)
  11. %
  12. % 选择存储路径、文件名以及格式
  13. [filename, pathname] = uiputfile({ ‘*.emf’,’Enhanced Meta File (*.emf)’;…
  14. ‘*.bmp’,’Bitmap (*.bmp)’; ‘*.fig’,’Figure (*.fig)’}, …
  15. ‘Save picture as’,’default’);
  16. % 如果用户选择取消,则直接返回
  17. if isequal(filename,0) || isequal(pathname,0)
  18. return
  19. end
  20. % 创建一个新的figure
  21. newFig = figure;
  22. % 获取axes控件的单位和位置
  23. axes_units = get(axesObject,’Units’);
  24. axes_pos = get(axesObject,’Position’);
  25. % 将坐标系对象复制到新的figure中
  26. axesObject2 = copyobj(axesObject,newFig);
  27. % 重新布局坐标系在新figure中的位置和单位
  28. set(axesObject2,’Units’,axes_units);
  29. set(axesObject2,’Position’,[15 5 axes_pos(3) axes_pos(4)]);
  30. % 如果legendObject被传递进来了
  31. if (exist(‘legendObject’))
  32. % 获取legend的位置和单位
  33. legend_units = get(legendObject,’Units’);
  34. legend_pos = get(legendObject,’Position’);
  35. % 将legend也拷贝到心figure
  36. legendObject2 = copyobj(legendObject,newFig);
  37. % 重新布局legend对象
  38. set(legendObject2,’Units’,legend_units);
  39. set(legendObject2,’Position’,[15-axes_pos(1)+legend_pos(1) 5-axes_pos(2)+legend_pos(2) legend_pos(3) legend_pos(4)] );
  40. end
  41. % 调整新figure的单位和位置
  42. set(newFig,’Units’,axes_units);
  43. set(newFig,’Position’,[15 5 axes_pos(3)+30 axes_pos(4)+10]);
  44. % 保存图像
  45. saveas(newFig,fullfile(pathname, filename))
  46. % 关闭新figure
  47. close(newFig)

复制代码

2、实例中使用savePlotWithinGUI()函数

2.1 这里我们已经提供了一个直接的GUI程序 Matlab GUI教程0x7--GUI中保存GUI中的Plots图形 save-image-tutorial.zip (8.62 KB, 下载次数: 995) ,下载后解压到Matlab工作目录,运行GUI得到如下界面

Matlab GUI教程0x7--GUI中保存GUI中的Plots图形

2.2 我们打开save_image_tutorial.m,定位到 plotAxes1_pushbutton_Callback,将看到如下代码

  1. % 这个就是GUI中Plot Axes 1按钮对应的对调函数
  2. % 选择绘图坐标系,开始绘图
  3. axes(handles.axes1)
  4. x = 0:10;
  5. y = 0:10;
  6. plot(x,y);
  7. % 添加标题和标签
  8. title(‘Axes 1’);
  9. xlabel(‘X data’);
  10. ylabel(‘Y data’);
  11. % 添加图例说明,并将其句柄保存到handles结构体中
  12. handles.legend_plot1 = legend(‘data’); % 保存以后方便以后直接使用
  13. % 更新handles结构体
  14. guidata(hObject, handles); % 必须更新,因为handles改变了

复制代码

2.3 在将光标定位到savePlot2_pushbutton_Callback,代码如下

  1. function savePlot2_pushbutton_Callback(hObject, eventdata, handles)
  2. % 在GUI的回调函数中调用savePlotWithinGUI函数,保存axes中的图形
  3. % 第一个参数是axes的句柄,handles.handles.axes2
  4. % 第二个参数是legend的句柄 handles.legend_plot2
  5. savePlotWithinGUI(handles.axes2,handles.legend_plot2);

复制代码

呵呵,原理和操作就这么简单,只是大家没有想到罢了!祝你愉快。。。。

正文完
请博主喝杯咖啡吧!
post-qrcode
 
admin
版权声明:本站原创文章,由 admin 2016-11-09发表,共计2768字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码