[编者注:]大作业界面比较简单,用代码写即可,两个轴、三个按钮,都有重要功能。再加上一个窗口的生成,以及一个静态文本帮助信息,共用7次底层函数,界面设计没有花费太多精力。从编程的角度来说,通过一个双循环,对照片每个像素点进行处理,最能体现编程思想,也是作业特点。
一、设计目标
此大作业的设计目标是通过matlab编程将一张图片转换为字符的格式保存在txt文件中,并且制作简单美观的GUI交互界面。
二、技术路线
1.编程实现GUI交互界面,其中包括三个按钮,两个图片展示框,一个静态文本框展示操作指南等信息;
2.编写open按钮的callback函数,其功能是从一个可以自定义的路径导入图片到图片展示框,避免了使用前还需要把要转换的图片放到.m文件的路径下,为用户提供了方便;
3.编写switch按钮的callback函数,其功能是把导入的图片转换为灰度图;
4.编写save按钮的callback函数。首先定义一个字符串,字符串的内容是颜色由深到浅的几个字符,然后用图片的灰度值除以字符串的长度再取整加一,实现某一个范围的灰度值对应某一个颜色深度的字符。再将对应好的字符矩阵用writematrix函数对齐输出到txt文件中。输出的txt文件同样可以自定义保存路径,在保存对话框中只需要注意在自定义文件名后面加上后缀.txt。
三、运行情况
1、启动程序后的初始界面
2、选择打开文件按钮,出现预定义对话框。
3、打开文件后显示在第一个坐标轴中
4、点击switch按钮,灰度图片显示在第二个轴中
5、点击保存按钮,保存文件,注意选择自定义的txt文件
四、函数代码(R1.m)
global GUI
GUI.F=figure('name','字符画生成器','IntegerHandle','off','position',[100 25 920 740]); %主界面
GUI.O=uicontrol('parent',GUI.F,'position',[20 350 170 40],'style','pushbutton','string',' o p e n ! ','callback',@open_image); %打开图片按钮
GUI.S=uicontrol('parent',GUI.F,'position',[215 350 170 40],'style','pushbutton','string','s w i t c h !','callback',@switch_image); %转换按钮
GUI.s=uicontrol('parent',GUI.F,'position',[410 350 170 40],'style','pushbutton','string',' s a v e ! ','callback',@save_image); %保存按钮
GUI.B=axes('parent',GUI.F,'position',[20/920 405/740 560/920 315/740],'visible','on','box','on'); %等待转换的图片
GUI.A=axes('parent',GUI.F,'position',[20/920 20/740 560/920 315/740],'visible','on','box','on'); %转换完成的图片
guide=['操作指南',10,'1.点击open按钮从某一地址选取要转换为字符画的图片;',10,'2.点击switch按钮预览图片的灰度图;',10,'3.点击save按钮将灰度图保存为字符画(txt格式文本)。',10,10,10,10,'如果保存的字符画难以辨认,可以通过在txt文件内调整字体大小,缩放整个文本两个方法改善。'];
GUI.H=uicontrol('parent',GUI.F,'position',[600 20 300 700],'style','text','string',guide,'BackgroundColor',[0.5 1 0.667],'horizontalalignment','left','Fontsize',19);
set(GUI.B,'xtick',[]) %删除当前图x轴刻度;
set(GUI.B,'ytick',[]) %删除当前图y轴刻度;
set(GUI.A,'xtick',[]) %删除当前图x轴刻度;
set(GUI.A,'ytick',[]) %删除当前图y轴刻度;
function open_image(~,~) %定义打开文件函数
global GUI file path
[file,path] = uigetfile; %返回名称和路径
axes(GUI.B);
imshow(fullfile(path,file));
end
function switch_image(~,~) %定义图片转换函数
global GUI file path gray
image=imread(fullfile(path,file));
g_ray=rgb2gray(image);%将rgb色彩转换为灰度图
[r,c]=size(g_ray);
gray=imresize(g_ray,[315,315*c/r]);
[R,C]=size(gray);
axes(GUI.A);
imshow(gray);
function save_image(~,~) %定义图片保存函数
global gray
[R,C]=size(gray);
char='$W&@E#8}]=+;;^^,,.. ';
len=length(char);
for i=1:R
for j=1:C
str(i,j)=char(floor(gray(i,j)/len)+1);
领取专属 10元无门槛券
私享最新 技术干货