笔者(没错,就是我)最近刚刚接触使用MATLAB的GUI做一些简单的图像处理,觉得挺有趣的,自己心血来潮想写写看,同时也是对学到的知识的回顾和总结。如有不妥之处,还请多多指教!
关于如何制作一个GUI界面在这里就不详细介绍了,因为在网上输入“GUi界面”都能搜出一大堆教程。
当你编辑好界面后,在对应的.m文件里你会看到一堆函数,一开始做学习做简单界面的功能的时候,并不需要理会这些函数究竟写了什么,只需要明白你实现的控件对应的回调函数,也就是Callback函数,实现的功能代码写进函数里就行。而CreateFcn是在生成这个控件显示之前,执行这个函数名下的代码;DeleteFcn则是在控件要销毁,但是在被销毁之前执行这个函数名下的代码。关于两个控件间,两个GUI界面间如何传值的问题,在之后的博文中会一一细说。
由于我做的是图像的处理,那么打开图像和保存图像就是必不可少。
先在菜单编辑器里添加“打开”和保存这两个菜单。为了能让打开的图片显示出来,我在界面正中间(当然是为了显示好点)添加了“坐标轴”控件。但是这样还不行,因为是坐标轴,每次运行时界面都会有坐标的标注,而我需要的是一个能显示图片的区域,因此需要在Openingfcn里添加这样一句代码:set(handles.axes1,'visible','off'); 让坐标轴的标注和刻度去掉(其实是隐藏掉)。
”打开图像“的回调函数里的代码如下:
axes(handles.axes1);
[filename,pathname]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif'},'Pick an image',
'C:\Users\Public\Pictures\Sample Pictures');
str=[pathname filename];
if isequal(filename,0)||isequal(pathname,0)
warndlg('Please select a picture first!','Warning');
return;
else
im = imread(str); (1)
imshow(im); (2)
end;
调用了MATLAB里的函数uigetfile,打开图片的路径得自己选择,可以修改'C:\Users\Public\Pictures\Sample Pictures'来改变每次打开图片的默认路径,imread和imshow分别是读取图片和显示图片。这里用的图片都是24位的真彩图,如果你想显示8位图,可以修改上面的代码行(1)(2)
[im,map] = imread(str);
imshow(im,map);
保存图片可以调用imwrite函数,具体代码如下
[FileName,PathName] = uiputfile({'*.jpg','JPEG(*.jpg)';...
'*.bmp','Bitmap(*.bmp)';...
'*.gif','GIF(*.gif)';...
'*.*', 'All Files (*.*)'},...
'Save Picture','Untitled');
if FileName==0
return;
else
h=getframe(handles.axes1);
imwrite(h.cdata,[PathName,FileName]);
end;
至于程序的退出比较简单,在”退出“的Callback函数里添加 close; 就行了。
这样就完成了最简单的设计。