📄 colormapsmake.m
字号:
if strcmp(button,'normal') % left mouse button
global M_BUTTON_DOWN M_PNTS M_LINES M_TEXT
ii = find(X > nodes(:,1)); % find node above point
minnode = max(ii);
ii = find(X < nodes(:,1)); % find node below point
maxnode = min(ii);
if (X - nodes(minnode,1)) > (nodes(maxnode,1)-X) % if closer to maxnode
if maxnode == nodenum; % if maxnode is the endnode
nodes(maxnode,2) = max(min(Y,1),0); % only move Y-position
else
nodes(maxnode,1) = round(X); % move node
nodes(maxnode,2) = max(min(Y,1),0);
end
M_BUTTON_DOWN = maxnode; % save what node was selected
elseif (X - nodes(minnode,1)) < (nodes(maxnode,1)-X)% if closer to minnode
if minnode == 1 %if firstnode
nodes(minnode,2) = max(min(Y,1),0); % only move Y-position
else
nodes(minnode,1) = round(X); % move node
nodes(minnode,2) = max(min(Y,1),0);
end
M_BUTTON_DOWN = minnode; % save what node was selected
end
cla
for i = 1:nodenum-1 % Redraw axis
M_PNTS(i) = plot(nodes(i,1),nodes(i,2),'ow');
M_LINES(i) = line([nodes(i,1),nodes(i+1)],...
[nodes(i,2),nodes(i+1,2)],'color',lcolor);
end
M_PNTS(i+1) = plot(nodes(nodenum,1),nodes(nodenum,2),'ow');
M_TEXT = text(0,1.05,...
[' ',int2str(nodes(M_BUTTON_DOWN,1)),', ',...
num2str(nodes(M_BUTTON_DOWN,2),2)],...
'Color','w','clipping','off',...
'VerticalAlignment','bottom',...
'FontSize',10);
axis([1 nodes(nodenum,1) 0 1])
elseif strcmp(button,'extend') % Middle Mouse Button
global M_BUTTON_DOWN M_PNTS M_LINES M_TEXT
ii = find(X > nodes(:,1)); % find node below
minnode = max(ii);
ii = find(X < nodes(:,1)); % find node above
maxnode = min(ii);
nodes = [nodes(1:minnode,:);[round(X),max(min(Y,1),0)];...
nodes(maxnode:nodenum,:)]; % add node shifting those above
nodenum = size(nodes,1);
M_BUTTON_DOWN = minnode+1;
cla
for i = 1:nodenum-1 % Redraw axis
M_PNTS(i) = plot(nodes(i,1),nodes(i,2),'ow');
M_LINES(i) = line([nodes(i,1),nodes(i+1)],...
[nodes(i,2),nodes(i+1,2)],'color',lcolor);
end
M_PNTS(i+1) = plot(nodes(nodenum,1),nodes(nodenum,2),'ow');
M_TEXT = text(0,1.05,...
[' ',int2str(nodes(M_BUTTON_DOWN,1)),', ',...
num2str(nodes(M_BUTTON_DOWN,2),2)],...
'Color','w','clipping','off',...
'VerticalAlignment','bottom',...
'FontSize',10);
axis([1 nodes(nodenum,1) 0 1])
elseif strcmp(button,'alt') % Right Mouse Button
ii = find(X > nodes(:,1)); % find node below
minnode = max(ii);
ii = find(X < nodes(:,1)); % find node above
maxnode = min(ii);
if (X - nodes(minnode,1)) > (nodes(maxnode,1)-X) % reassign nodes
if maxnode < nodenum;
nodes = [nodes(1:maxnode-1,:);nodes(maxnode+1:nodenum,:)];
end
elseif (X - nodes(minnode,1)) < (nodes(maxnode,1)-X)
if minnode > 1
nodes = [nodes(1:minnode-1,:);nodes(minnode+1:nodenum,:)];
end
end
nodenum = size(nodes,1);
cla
for i = 1:nodenum-1 %redraw axis
plot(nodes(i,1),nodes(i,2),'ow')
line([nodes(i,1),nodes(i+1)],[nodes(i,2),nodes(i+1,2)],'color',lcolor)
end
plot(nodes(nodenum,1),nodes(nodenum,2),'ow')
axis([1 nodes(nodenum,1) 0 1])
end
set(axhandle,'UserData',nodes) % update nodes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif strcmp(bins,'up') % Mouse Button Up Handler
figh = gcbf;
global M_TEXT
delete(M_TEXT)
clear global M_BUTTON_DOWN M_LINES M_PNTS M_TEXT % clear variables
UserData = get(figh,'UserData');
fighandle = str2num(get(figh,'tag')); % get figure to apply colormap
axhandle = gca;
nodes = get(axhandle,'UserData'); % get nodes
tagval = get(axhandle,'tag');
if strcmp(tagval,'cb') | strcmp(tagval,'hd')
return % if colorbar or title axis then return
end
for i = 1:size(nodes,1)-1
W = lspace(nodes(i,2),nodes(i+1,2),nodes(i+1,1)-nodes(i,1)+1);
map(nodes(i,1):nodes(i+1,1)-1) = W(1:nodes(i+1,1)-nodes(i,1))';
end
map(nodes(i+1,1)) = nodes(i+1,2);
if strcmp(tagval,'r')
UserData(:,1) = map';
elseif strcmp(tagval,'g')
UserData(:,2) = map';
elseif strcmp(tagval,'b')
UserData(:,3) = map';
elseif strcmp(tagval,'y')
UserData(:,4) = map';
end
set(figh,'UserData',UserData,'Colormap',... % assign new colormap
UserData(:,1:3).*(UserData(:,4)*ones(1,3)))
if fighandle ~= figh
set(fighandle,'Colormap',UserData(:,1:3).*(UserData(:,4)*ones(1,3)))
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif strcmp(bins,'motion') % Mouse Motion Handler
global M_BUTTON_DOWN M_LINES M_PNTS M_TEXT
if isempty(M_BUTTON_DOWN)
return % If mouse button is not down then return
end
axhandle = gca;
nodes = get(gca,'UserData');
tagval = get(gca,'tag');
P = get(axhandle,'CurrentPoint');
X = P(1,1);
Y = P(1,2);
nodenum = size(nodes,1);
if M_BUTTON_DOWN == 1 | M_BUTTON_DOWN == nodenum; % move selected node to
nodes(M_BUTTON_DOWN,2) = max(min(Y,1),0); % new mouse position
else
nodes(M_BUTTON_DOWN,1) = max(nodes(M_BUTTON_DOWN-1,1), ...
min(nodes(M_BUTTON_DOWN+1,1),round(X)));
nodes(M_BUTTON_DOWN,2) = max(min(Y,1),0);
end
delete(M_PNTS(M_BUTTON_DOWN))
M_PNTS(M_BUTTON_DOWN) = plot(nodes(M_BUTTON_DOWN,1),...
nodes(M_BUTTON_DOWN,2),'ow');
if M_BUTTON_DOWN > 1
delete(M_LINES(M_BUTTON_DOWN-1))
M_LINES(M_BUTTON_DOWN-1) = line([nodes(M_BUTTON_DOWN-1,1),...
nodes(M_BUTTON_DOWN,1)],...
[nodes(M_BUTTON_DOWN-1,2),nodes(M_BUTTON_DOWN,2)],'color',tagval);
end
if M_BUTTON_DOWN < nodenum
delete(M_LINES(M_BUTTON_DOWN))
M_LINES(M_BUTTON_DOWN) = line([nodes(M_BUTTON_DOWN,1),...
nodes(M_BUTTON_DOWN+1,1)],...
[nodes(M_BUTTON_DOWN,2),nodes(M_BUTTON_DOWN+1,2)],'color',tagval);
end
delete(M_TEXT)
M_TEXT = text(0,1.05,...
[' ',int2str(nodes(M_BUTTON_DOWN,1)),', ',...
num2str(nodes(M_BUTTON_DOWN,2),2)],...
'Color','w','clipping','off',...
'VerticalAlignment','bottom',...
'FontSize',10);
axis([1 nodes(nodenum,1) 0 1])
set(axhandle,'UserData',nodes)
elseif strcmp(bins,'export') % export colormap to desktop
fig = gcbf;
pos = get(fig,'Position');
figx = 400; % set up dialog figure
figy = 200;
figh = figure('Units','pixels',...
'Position',...
[pos(1)+pos(3)/2-figx/2 pos(2)+pos(4)/2-figy/2 figx figy],...
'Resize','off','CloseRequestFcn','','menubar','none',...
'numbertitle','off');
uicolor = get(figh,'Color');
% text uicontrol
uicontrol('Style','Text','Units','Pixels',...
'String','Output Colormap to Desktop Variable:',...
'Position',[20 figy-40 300 22],'HorizontalAlignment','left',...
'FontSize',14,'BackGroundColor',uicolor)
% edit uicontrol
ui1 = uicontrol('Style','Edit','Units','Pixels',...
'String','cmap','FontSize',12,...
'Position',[120 figy-100 150 30]);
TIMESTRING = ['[OBJ1,FIGH1] = gcbo;',...
'OBJHAN = get(OBJ1,''UserData'');',...
'LAB1 = get(OBJHAN(1),''string'');',...
'DATA1 = get(OBJHAN(2),''Colormap'');',...
'eval([LAB1,'' = DATA1;'']);',...
'delete(FIGH1);',...
'clear OBJ1 FIGH1 OBJHAN DATA1 LAB1'];
% OK Button
uicontrol('Style','PushButton','Units','Pixels',...
'String','OK','FontSize',14,...
'Position',[figx/4-20 10 65 30],...
'UserData',[ui1 fig],'Callback',TIMESTRING)
TIMESTRING = ['[OBJ1,FIGH1] = gcbo;',...
'delete(FIGH1);',...
'clear OBJ1 FIGH1;'];
% Cancel Button
uicontrol('Style','PushButton','Units','Pixels',...
'String','Cancel','FontSize',14,...
'Position',[3*figx/4-20 10 65 30],...
'Callback',TIMESTRING)
elseif strcmp(bins,'help') % Help function
helpstr = sprintf(['Left Button - move RGB node\n',...
'Middle Button - add node to RGB\n',...
'Right Button - remove node (>2)\n\n',...
'Export button - assign colormap to variable']);
help = helpdlg(helpstr,'ColorMap HELP');
elseif strcmp(bins,'close') % Close Request function
figh = gcbf;
clear global M_BUTTON_DOWN M_LINES M_PNTS M_TEXT % get rid of global vars
delete(figh)
elseif strcmp(bins,'reset') % reset Colormap to original values
fighandle = gcbf;
obj = findobj('tag','hd','parent',fighandle);
map = get(obj,'UserData'); % get original colormap stored in hd axes
set(fighandle,'Colormap',map,...
'UserData',[map , ones(size(map,1),1)])
obj = findobj('tag','cb','parent',fighandle);
nodes = get(obj,'UserData'); % get node values stored in cb axes
red = nodes(4:nodes(1,1)+3,:);
green = nodes(nodes(1,1)+4:nodes(1,1)+nodes(2,1)+3,:);
blue = nodes(nodes(1,1)+nodes(2,1)+4:nodes(1,1)+nodes(2,1)+...
nodes(3,1)+3,:);
obj = findobj('tag','r','parent',fighandle);
axes(obj) % reset colormap graphs
cla
nodenum = nodes(1,1);
for i = 1:nodenum-1
plot(red(i,1),red(i,2),'ow')
line([red(i,1),red(i+1)],[red(i,2),red(i+1,2)],'color','r')
end
plot(red(nodenum,1),red(nodenum,2),'ow')
set(obj,'UserData',red)
obj = findobj('tag','g','parent',fighandle);
axes(obj)
cla
nodenum = nodes(2,1);
for i = 1:nodenum-1
plot(green(i,1),green(i,2),'ow')
line([green(i,1),green(i+1)],[green(i,2),green(i+1,2)],'color','g')
end
plot(green(nodenum,1),green(nodenum,2),'ow')
set(obj,'UserData',green)
obj = findobj('tag','b','parent',fighandle);
axes(obj)
cla
nodenum = nodes(3,1);
for i = 1:nodenum-1
plot(blue(i,1),blue(i,2),'ow')
line([blue(i,1),blue(i+1)],[blue(i,2),blue(i+1,2)],'color','b')
end
plot(blue(nodenum,1),blue(nodenum,2),'ow')
set(obj,'UserData',blue)
obj = findobj('tag','y','parent',fighandle);
axes(obj)
cla
trans = [1 1;size(map,1) 1];
nodenum = 2;
for i = 1:nodenum-1
plot(trans(i,1),trans(i,2),'ow')
line([trans(i,1),trans(i+1)],[trans(i,2),trans(i+1,2)],'color','y')
end
plot(trans(nodenum,1),trans(nodenum,2),'ow')
set(obj,'UserData',trans)
figh = str2num(get(fighandle,'tag'));
if figh~=fighandle
set(figh,'Colormap',map)
end
end
end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function out = lspace(x,y,N)
% LSPACE
% Unfortunately, linspace.m changed in Matlab 5.2, and it doesn't work
% the same. The new function cannot handle the command linspace(0,0,24).
% It just returns an empty matrix.
out = [x+(0:N-2)*(y-x)/(N-1) y];
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -