Matlab 图片操作

来源:互联网 发布:注册域名流程 知乎 编辑:程序博客网 时间:2024/06/08 09:18

1 figure属性

  1. gca:返回当前axes对象的句柄值

  2. gcf:返回当前Figure对象的句柄值

  3. gco:返回当前鼠标单击的句柄值,该对象可以是除root对象外的任意图形对象,并且Matlab会把当前图形对象的句柄值存放在Figure的CurrentObject属性中

2 笔记

  1. help中position属性解释:Positioning Figures

3 matlab编程杂记
3.1 matlab自动保存图片到word中
首先明确矢量图和标量图(位图)的区别。保存为jpg或png等格式的图片均为位图,其由称为像素的单个点组成,因此越高清的图占空间越大,而矢量图是由矢量线构成,不会随着放大而失真,占用空间也小。所以一般在电子版论文中使用的贴图等都最好为矢量图。
matlab中保存为矢量图的方式,单个或少量图片的话,直接点击figure中edit一栏的copy figure将矢量图复制到剪贴板上,就可以直接在word中粘贴。想要减少手动操作时,可以先通过命令将图片复制到剪贴板上,然后再在word中点击粘贴可以一次性复制很多,但由于word受限于剪贴板数量为24(07版),所以也不适用于大批量图片自动复制粘贴。因此使用如下命令:

f=gcf;hgexport(f, '-clipboard');  Selection.Paste;

而在使用其命令前,就需要搭建好matlab与word的联系,进而可以使用Selection来操作word的粘贴动作。
3.2 搭建word与matlab的工作环境

本节资料主要来自网络上谢中华老师发布的《利用matlab生成word和excel文档》中编写的程序。

function [Word,Document]=word(filespec_user)    try        % 若Word服务器已经打开,返回其句柄Word        Word = actxGetRunningServer('Word.Application');    catch        % 创建一个Microsoft Word服务器,返回句柄Word        Word = actxserver('Word.Application');     end    Word.Visible = 1;    if exist(filespec_user,'file');         Document = Word.Documents.Open(filespec_user);        else        Document = Word.Documents.Add;             Document.SaveAs(filespec_user);    endend

上述函数接受filespec_user变量记录的路径文件,也就是实际的word文档地址信息。然后判断是否存在,不存在则创建并保存。即创建matlab与word服务器下的某个word文档的关联,并返回word、Document用于后续操作。word下面主要涉及一些动作,即需要的Selection。

Selection=Word.Selection;

然后就可以使用以下或者更多的动作

Selection.TypeParagraph;%回车分段Selection.Paste;%粘贴Selection.GoToPrevious(8)%将光标往前移动

3.3 再回过头使用命令进行相关的操作
查资料或者直接点击matlab变量窗口中的Word、Selection会弹出相关的属性界面,但似乎不是很好找。
更多的命令动作可以查阅word开发文档(或者wps开发文档,很多相通)。例如第三句是通过查阅wps文档获得的。
比如要想操作光标移动到上一张图片之前,首先查找Selection,可以看到GoTOPrevious命令是向前移动相关的。于是查看之,发现需要的参数类型是WdGotoItem,于是再查找这个类型,发现是个枚举类型,若值为8,则是向前移动过一个图片类型对象。这个命令可以调整图片粘贴的顺序。
查找Selection下属命令
查看GoToPrevious
查看需要的参数类型
3.4 我在程序中批量复制图片的相关代码
首先是上面的环境word.m文件。
然后是主程序里:

filespec_user = [pwd '\test.doc'];[Word,Document]=word(filespec_user);Selection=Word.Selection;Selection.TypeParagraph;

在打印图片时加上了文字小标题:
其中必须先使用MoveDown再回车才能分段成功。

page_info=['第 ',num2str(page),' 段:',num2str(TBE(page)),'-',num2str(TEN(page))];Content = Document.Content;Selection.Start=Content.end;     Selection.Text = page_info;Selection.Font.Size = 10;Selection.Font.Bold = 0;    Selection.MoveDown;Selection.TypeParagraph;

然后画图,比如

figure('position',[300,200,xlen,ylen]);plot(tt,uu,'k');

然后调用坐标扩展函数,该函数可以删除figure中多余空白,凸显有效内容

expand_axes(Document,Selection);

在该函数结尾处:

if(Selection~=0)    f=gcf;    hgexport(f, '-clipboard');      Selection.Paste;    close all;end

使用close all主要为了画一张图复制粘贴后就关闭,以免打开太多。

4 matlab的一些使用方法
4.1 legend
- legend(‘boxoff’)关闭标识外框,不覆盖图片内容.
- legend(…,’Location’,LOC)来指定图例标识框的位置,如’NorthWest’,或者, legend(str1,…,参数) 参数字符串:0,尽量不与数据冲突,自动放置在最佳位置;1,放置在图形的右上角;2,放置在图形的左上角;3,放置在图形的左下角;4,放置在图形的右下角;-1,放置在图形视窗的外右边.

0 0
原创粉丝点击