利用Matlab復(fù)刻舉牌加油小人生成器
突然發(fā)現(xiàn)cla函數(shù)也可以應(yīng)用到app designer控件上,因而對部分內(nèi)容做出更改。
手癢,用matlab app designer復(fù)刻了一款舉牌加油小人生成器,效果如下:


該程序可以生成正方形和長方形舉牌小人,并且可以自己設(shè)置背景顏色(點擊那些有顏色的小框框),點擊綠色旋轉(zhuǎn)按鈕可以刷新生成的圖片。


目前需要存圖還是需要通過uiaxes自帶的toolbar(下圖右上角所示):

使用該程序需要小人的素材包,我已經(jīng)將素材整理為materials.mat文件,網(wǎng)盤下載鏈接如下:
鏈接:https://pan.baidu.com/s/1ISloOsq8bIVDjm8TzRPlKw
提取碼:1234
使用時需要把materials.mat和m文件放在同一文件夾
完整代碼
function upup
global textMsg bkgColor colorList axesType
global textArea
textMsg=[];
axesType=2;
bkgColor=[1,1,1];
colorList=[0.9000 0 0.0700
0.9200 0.3300 0.0800
0.9600 0.6200 0.7500
0.9600 0.9400 0.5500
0.7600 0.8400 0.2500
0.3800 0.7600 0.7300
0.4700 0.8100 0.9400
0.6000 0.0500 0.4900
1 1 1 ];
%load pic and create pic ==================================================
materials=load('materials.mat');
if ~exist('materials','dir')
mkdir('materials');
end
for i=1:size(colorList,1)
Rc=zeros(60,60);Rc(11:50,11:50)=255.*colorList(i,1);
Gc=zeros(60,60);Gc(11:50,11:50)=255.*colorList(i,2);
Bc=zeros(60,60);Bc(11:50,11:50)=255.*colorList(i,3);
cPic(:,:,1)=Rc;cPic(:,:,2)=Gc;cPic(:,:,3)=Bc;
imwrite(uint8(cPic),['materials\bkg',num2str(i),'.png'])
end
imwrite(materials.imgSet.cover,'materials\cover.jpg')
imwrite(materials.imgSet.square,'materials\square.jpg')
imwrite(materials.imgSet.refresh.CData,'materials\refresh.png','Alpha',materials.imgSet.refresh.AData)
%==========================================================================
upFig=uifigure('units','pixels',...
'position',[320 50 400 600],...
'Numbertitle','off',...
'menubar','none',...
'resize','off',...
'name','upup',...
'color',[0.93 0.6 0]);
%==========================================================================
textAreaLabel=uilabel(upFig);
textAreaLabel.Position=[55 445 290 100];
textAreaLabel.Text='';
textAreaLabel.BackgroundColor=[0,0,0];
textArea=uitextarea(upFig,'ValueChangedFcn',@changeText);
textArea.Position=[60 450 280 90];
textArea.FontSize=23;
%text label hdl part=======================================================
textLabel_1=uilabel(upFig);
textLabel_1.Position=[52 517 296 106];
textLabel_1.Text='YOUR MESSAGE HERE';
textLabel_1.FontSize=24;
textLabel_1.FontWeight='bold';
textLabel_1.HorizontalAlignment='center';
textLabel_2=uilabel(upFig);
textLabel_2.Position=[52 367 296 106];
textLabel_2.Text='BACKGROUND COLORS';
textLabel_2.FontSize=24;
textLabel_2.FontWeight='bold';
textLabel_2.HorizontalAlignment='center';
textLabel_3=uilabel(upFig);
textLabel_3.Position=[10 310 60 50];
textLabel_3.Text='SIZE';
textLabel_3.FontSize=20;
textLabel_3.FontWeight='bold';
textLabel_3.HorizontalAlignment='center';
%bkg color hdl part========================================================
for i=1:size(colorList,1)
CL(i)=uiimage(upFig);
CL(i).Position=[10+i*35,365,30,30];
CL(i).UserData=i;
CL(i).ImageSource=['materials\bkg',num2str(i),'.png'];
end
set(CL,'ImageClickedFcn',@bkgChange)
%reset Size hdl part=======================================================
sizeBtn(1)=uiimage(upFig);
sizeBtn(1).Position=[70 320 168 30];
sizeBtn(1).UserData=1;
sizeBtn(1).ImageSource='materials\cover.jpg';
sizeBtn(2)=uiimage(upFig);
sizeBtn(2).Position=[245 320 80 30];
sizeBtn(2).UserData=2;
sizeBtn(2).ImageSource='materials\square.jpg';
set(sizeBtn,'ImageClickedFcn',@sizeChange)
%==========================================================================
refreshBtn=uiimage(upFig);
refreshBtn.Position=[340 317.5 35 35];
refreshBtn.ImageSource='materials\refresh.png';
set(refreshBtn,'ImageClickedFcn',@changeText)
%==========================================================================
upAx=uiaxes('Units','pixels',...
'parent',upFig,...
'Position',[50 10 300 300],...
'Color',[0.99 0.99 0.99],...
'Box','on', ...
'XTick',[],...
'YTick',[],...
'XLimMode','manual',...
'YLimMode','manual',...
'XLim',[0 300],...
'YLim',[0 300], ...
'BackgroundColor',[0,0,0],...
'YDir','reverse');
hold(upAx,'on')
%==========================================================================
function bkgChange(~,event)
objNum=event.Source.UserData;
upAx.Color=colorList(objNum,:);
end
function sizeChange(~,event)
axesType=event.Source.UserData;
switch axesType
case 1
upAx.Position=[10 120 380 141];
upAx.XLim=[0 380];
upAx.YLim=[0 141];
case 2
upAx.Position=[50 10 300 300];
upAx.XLim=[0 300];
upAx.YLim=[0 300];
end
end
function changeText(~,~)
cla(upAx)
% hold(upAx,'off')
% image(upAx,[-1,0],[-1,0],ones(1,1,3),'visible','off');
% hold(upAx,'on')
textMsg=textArea.Value;
for ii=1:length(textMsg)
tempStr=textMsg{ii};
for jj=1:length(tempStr)
if tempStr(jj)~=' '
roleType=randi(24);
image(upAx,[0,103*0.4]+110+28*(jj-1)-27*(ii-1),...
[0,198*0.4]+10+12*(jj-1)+22*(ii-1),...
materials.imgSet.CData{roleType},...
'AlphaData',materials.imgSet.AData{roleType},...
'Interpolation','bilinear')
text(upAx,21+110+28*(jj-1)-27*(ii-1),...
10+10+12*(jj-1)+22*(ii-1),...
tempStr(jj),'rotation',-38,'FontSize',16,...
'FontWeight','bold','Color',[0.4,0.3,0.3],...
'FontAngle','italic','HorizontalAlignment','center');
end
end
end
end
end
另:完整素材包+mat文件+m文件可以在下面下載
百度網(wǎng)盤鏈接:https://pan.baidu.com/s/1F6Z3_-91_OKtV2zjQUg47Q
注:代碼和素材僅作學(xué)習(xí)用途,勿做他用
另
若matlab是版本為R2016a以后,R2019a之前,會因為uiimage未被推出而無法正常使用,可以嘗試以下代碼,該代碼依舊需要materials.mat和m文件在同一文件夾:
function upupUiBtn
global textMsg bkgColor colorList axesType
global textArea
textMsg=[];
axesType=2;
bkgColor=[1,1,1];
colorList=[0.9000 0 0.0700
0.9200 0.3300 0.0800
0.9600 0.6200 0.7500
0.9600 0.9400 0.5500
0.7600 0.8400 0.2500
0.3800 0.7600 0.7300
0.4700 0.8100 0.9400
0.6000 0.0500 0.4900
1 1 1 ];
%load pic and create pic ==================================================
materials=load('materials.mat');
if ~exist('materials','dir')
mkdir('materials');
end
for i=1:size(colorList,1)
Rc=zeros(60,60);Rc(11:50,11:50)=255.*colorList(i,1);
Gc=zeros(60,60);Gc(11:50,11:50)=255.*colorList(i,2);
Bc=zeros(60,60);Bc(11:50,11:50)=255.*colorList(i,3);
cPic(:,:,1)=Rc;cPic(:,:,2)=Gc;cPic(:,:,3)=Bc;
imwrite(uint8(cPic),['materials\bkg',num2str(i),'.png'])
end
imwrite(materials.imgSet.cover,'materials\cover.jpg')
imwrite(materials.imgSet.square,'materials\square.jpg')
imwrite(materials.imgSet.refresh.CData,'materials\refresh.png','Alpha',materials.imgSet.refresh.AData)
%==========================================================================
upFig=uifigure('units','pixels',...
'position',[320 50 400 600],...
'Numbertitle','off',...
'menubar','none',...
'resize','off',...
'name','upup',...
'color',[0.93 0.6 0]);
%==========================================================================
textAreaLabel=uilabel(upFig);
textAreaLabel.Position=[55 445 290 100];
textAreaLabel.Text='';
textAreaLabel.BackgroundColor=[0,0,0];
textArea=uitextarea(upFig,'ValueChangedFcn',@changeText);
textArea.Position=[60 450 280 90];
textArea.FontSize=23;
%text label hdl part=======================================================
textLabel_1=uilabel(upFig);
textLabel_1.Position=[52 517 296 106];
textLabel_1.Text='YOUR MESSAGE HERE';
textLabel_1.FontSize=24;
textLabel_1.FontWeight='bold';
textLabel_1.HorizontalAlignment='center';
textLabel_2=uilabel(upFig);
textLabel_2.Position=[52 367 296 106];
textLabel_2.Text='BACKGROUND COLORS';
textLabel_2.FontSize=24;
textLabel_2.FontWeight='bold';
textLabel_2.HorizontalAlignment='center';
textLabel_3=uilabel(upFig);
textLabel_3.Position=[10 310 60 50];
textLabel_3.Text='SIZE';
textLabel_3.FontSize=20;
textLabel_3.FontWeight='bold';
textLabel_3.HorizontalAlignment='center';
%bkg color hdl part========================================================
for i=1:size(colorList,1)
CL(i)=uibutton(upFig);
CL(i).Position=[10+i*35,365,30,30];
CL(i).BackgroundColor=[0 0 0];
CL(i).Text='';
CL(i).UserData=i;
CL(i).Icon=['materials\bkg',num2str(i),'.png'];
end
set(CL,'ButtonPushedFcn',@bkgChange)
%reset Size hdl part=======================================================
sizeBtn(1)=uibutton(upFig);
sizeBtn(1).Position=[80 320 145 32];
sizeBtn(1).UserData=1;
sizeBtn(1).Text='';
sizeBtn(1).BackgroundColor=[0 0 0];
sizeBtn(1).Icon='materials\cover.jpg';
sizeBtn(2)=uibutton(upFig);
sizeBtn(2).Position=[235 320 78 32];
sizeBtn(2).UserData=2;
sizeBtn(2).Text='';
sizeBtn(2).BackgroundColor=[0 0 0];
sizeBtn(2).Icon='materials\square.jpg';
set(sizeBtn,'ButtonPushedFcn',@sizeChange)
refreshBtn=uibutton(upFig);
refreshBtn.Position=[330 318 35 35];
refreshBtn.Text='';
refreshBtn.BackgroundColor=[0.93 0.6 0];
refreshBtn.Icon='materials\refresh.png';
set(refreshBtn,'ButtonPushedFcn',@changeText)
%==========================================================================
upAx=uiaxes('Units','pixels',...
'parent',upFig,...
'Position',[50 10 300 300],...
'Color',[0.99 0.99 0.99],...
'Box','on', ...
'XTick',[],...
'YTick',[],...
'XLimMode','manual',...
'YLimMode','manual',...
'XLim',[0 300],...
'YLim',[0 300], ...
'BackgroundColor',[0,0,0],...
'YDir','reverse');
hold(upAx,'on')
%==========================================================================
function bkgChange(~,event)
objNum=event.Source.UserData;
upAx.Color=colorList(objNum,:);
end
function sizeChange(~,event)
axesType=event.Source.UserData;
switch axesType
case 1
upAx.Position=[10 120 380 141];
upAx.XLim=[0 380];
upAx.YLim=[0 141];
case 2
upAx.Position=[50 10 300 300];
upAx.XLim=[0 300];
upAx.YLim=[0 300];
end
end
function changeText(~,~)
cla(upAx)
% hold(upAx,'off')
% image(upAx,[-1,0],[-1,0],ones(1,1,3),'visible','off');
% hold(upAx,'on')
textMsg=textArea.Value;
for ii=1:length(textMsg)
tempStr=textMsg{ii};
for jj=1:length(tempStr)
if tempStr(jj)~=' '
roleType=randi(24);
image(upAx,[0,103*0.4]+110+28*(jj-1)-27*(ii-1),...
[0,198*0.4]+10+12*(jj-1)+22*(ii-1),...
materials.imgSet.CData{roleType},...
'AlphaData',materials.imgSet.AData{roleType},...
'Interpolation','bilinear')
text(upAx,21+110+28*(jj-1)-27*(ii-1),...
10+10+12*(jj-1)+22*(ii-1),...
tempStr(jj),'rotation',-38,'FontSize',16,...
'FontWeight','bold','Color',[0.4,0.3,0.3],...
'FontAngle','italic','HorizontalAlignment','center');
end
end
end
end
end
非uiimage版按鈕長這樣:

以上就是利用Matlab復(fù)刻舉牌加油小人生成器的詳細(xì)內(nèi)容,更多關(guān)于Matlab舉牌加油小人生成器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
數(shù)組指針、指針數(shù)組以及二位數(shù)組的深入解析
下面來講講多維數(shù)組與指針的關(guān)系。與普通數(shù)組一樣,使用多維數(shù)組時,實際上將其自動轉(zhuǎn)換為指向該數(shù)組第一個元素的指針2013-09-09
C++中cin.getline()和getline()函數(shù)的區(qū)別小結(jié)
這篇文章主要介紹了C++中cin.getline()和getline()函數(shù)區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

