www.pudn.com > 精通Matlab综合辅导与指南-源程序.zip > mmsetclr.m


%MMSETCLR Obtain an RGB triple interactively from a color sample.
% MMSETCLR displays a dialog box for the user to select
% a color interactively and displays the RGB triple value of
% the new color.
%
% Example:
%     mmsetclr
%

% B.R. Littlefield, University of Maine, Orono ME 04469
% 3/30/95
% Copyright (c) 1996 Prentice Hall, Inc.

%======================================================================
% Set initial RGB and HSV values, get a new figure window, and set
% some figure properties (position, color, and title).
%======================================================================

initrgb = [0 0 0];
inithsv = rgb2hsv(initrgb);

scr = get(0,'screensize');
Hf_fig=figure;

set(Hf_fig,'pos',[(scr(3)/2)-220 (scr(4)/2)-165 440 330],...
  'color',[.75 .75 .75],...
  'numbertitle','off',...
  'name','Color Selector');

%======================================================================
% Set some default properties for uicontrols in this figure.
%======================================================================

set(Hf_fig,'DefaultUicontrolUnits','normalized',...
  'DefaultUicontrolBackgroundColor',get(Hf_fig,'color'));

%======================================================================
% Define the 'initial' and 'new' color frames, and label them.
%======================================================================

Hc_ifr = uicontrol(Hf_fig,'style','frame',...
  'pos',[.25 .70 .25 .20],...
  'backgroundcolor',initrgb);
 
Hc_nfr = uicontrol(Hf_fig,'style','frame',...
  'pos',[.50 .70 .25 .20],...
  'backgroundcolor',initrgb); 

Hc_ilabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.25 .91 .25 .05],...
  'string','Initial Color');

Hc_nlabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.50 .91 .25 .05],...
  'string','New Color');

%======================================================================
% Get the color values, and display them under the frames.
%======================================================================
 
Hc_icur = uicontrol(Hf_fig,'style','text',...
  'pos',[.25 .64 .25 .05],...
  'string',sprintf('[%.2f %.2f %.2f]',get(Hc_ifr,'backgroundcolor')));

Hc_ncur = uicontrol(Hf_fig,'style','text',...
  'pos',[.50 .64 .25 .05],...
  'string',sprintf('[%.2f %.2f %.2f]',get(Hc_nfr,'backgroundcolor')));

%======================================================================
% Define the sliders with labels and current value displays.
% The slider callbacks set the new color from the appropriate
% RGB or HSV slider set, and update the other slider values.
%======================================================================

Hc_rsli = uicontrol(Hf_fig,'style','slider',...
  'pos',[.10 .55 .35 .05],...
  'min',0,'max',1,'val',initrgb(1),...
  'callback',[...
    'set(Hc_nfr,''backgroundcolor'',',...
      '[get(Hc_rsli,''val''),get(Hc_gsli,''val''),get(Hc_bsli,''val'')]),',...
    'set(Hc_ncur,''string'',',...
      'sprintf(''[%.2f %.2f %.2f]'',get(Hc_nfr,''backgroundcolor''))),',...
    'hv=rgb2hsv(get(Hc_nfr,''backgroundcolor''));',...
    'set(Hc_hsli,''val'',hv(1)),',...
    'set(Hc_hcur,''string'',sprintf(''%.2f'',hv(1))),',...
    'set(Hc_ssli,''val'',hv(2)),',...
    'set(Hc_scur,''string'',sprintf(''%.2f'',hv(2))),',...
    'set(Hc_vsli,''val'',hv(3)),',...
    'set(Hc_vcur,''string'',sprintf(''%.2f'',hv(3))),',...
    'set(Hc_rcur,''string'',sprintf(''%.2f'',get(Hc_rsli,''val'')))']);
  
Hc_rcur = uicontrol(Hf_fig,'style','text',...
  'pos',[.01 .55 .08 .05],...
  'string',sprintf('%.2f',get(Hc_rsli,'val')));

Hc_rlabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.10 .49 .35 .05],...
  'string','Red');

Hc_gsli = uicontrol(Hf_fig,'style','slider',...
  'pos',[.10 .43 .35 .05],...
  'min',0,'max',1,'val',initrgb(2),...
  'callback',[...
    'set(Hc_nfr,''backgroundcolor'',',...
       '[get(Hc_rsli,''val''),get(Hc_gsli,''val''),get(Hc_bsli,''val'')]),',...
    'set(Hc_ncur,''string'',',...
      'sprintf(''[%.2f %.2f %.2f]'',get(Hc_nfr,''backgroundcolor''))),',...
    'hv=rgb2hsv(get(Hc_nfr,''backgroundcolor''));',...
    'set(Hc_hsli,''val'',hv(1)),',...
    'set(Hc_hcur,''string'',sprintf(''%.2f'',hv(1))),',...
    'set(Hc_ssli,''val'',hv(2)),',...
    'set(Hc_scur,''string'',sprintf(''%.2f'',hv(2))),',...
    'set(Hc_vsli,''val'',hv(3)),',...
    'set(Hc_vcur,''string'',sprintf(''%.2f'',hv(3))),',...
    'set(Hc_gcur,''string'',sprintf(''%.2f'',get(Hc_gsli,''val'')))']);
  
Hc_gcur = uicontrol(Hf_fig,'style','text',...
  'pos',[.01 .43 .08 .05],...
  'string',sprintf('%.2f',get(Hc_gsli,'val')));

Hc_glabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.10 .37 .35 .05],...
  'string','Green');

Hc_bsli = uicontrol(Hf_fig,'style','slider',...
  'pos',[.10 .30 .35 .05],...
  'min',0,'max',1,'val',initrgb(3),...
  'callback',[...
    'set(Hc_nfr,''backgroundcolor'',',...
       '[get(Hc_rsli,''val''),get(Hc_gsli,''val''),get(Hc_bsli,''val'')]),',...
    'set(Hc_ncur,''string'',',...
      'sprintf(''[%.2f %.2f %.2f]'',get(Hc_nfr,''backgroundcolor''))),',...
    'hv=rgb2hsv(get(Hc_nfr,''backgroundcolor''));',...
    'set(Hc_hsli,''val'',hv(1)),',...
    'set(Hc_hcur,''string'',sprintf(''%.2f'',hv(1))),',...
    'set(Hc_ssli,''val'',hv(2)),',...
    'set(Hc_scur,''string'',sprintf(''%.2f'',hv(2))),',...
    'set(Hc_vsli,''val'',hv(3)),',...
    'set(Hc_vcur,''string'',sprintf(''%.2f'',hv(3))),',...
    'set(Hc_bcur,''string'',sprintf(''%.2f'',get(Hc_bsli,''val'')))']);
  
Hc_bcur = uicontrol(Hf_fig,'style','text',...
  'pos',[.01 .30 .08 .05],...
  'string',sprintf('%.2f',get(Hc_bsli,'val')));

Hc_blabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.10 .24 .35 .05],...
  'string','Blue');

Hc_hsli = uicontrol(Hf_fig,'style','slider',...
  'pos',[.55 .55 .35 .05],...
  'min',0,'max',1,...
  'val',inithsv(1),...
  'callback',['rb=hsv2rgb(',...
       '[get(Hc_hsli,''val''),get(Hc_ssli,''val''),get(Hc_vsli,''val'')]);',...
    'set(Hc_nfr,''backgroundcolor'',rb),',...
    'set(Hc_ncur,''string'',sprintf(''[%.2f %.2f %.2f]'',rb)),',...
    'set(Hc_rsli,''val'',rb(1)),',...
    'set(Hc_rcur,''string'',sprintf(''%.2f'',rb(1))),',...
    'set(Hc_gsli,''val'',rb(2)),',...
    'set(Hc_gcur,''string'',sprintf(''%.2f'',rb(2))),',...
    'set(Hc_bsli,''val'',rb(3)),',...
    'set(Hc_bcur,''string'',sprintf(''%.2f'',rb(3))),',...
    'set(Hc_hcur,''string'',sprintf(''%.2f'',get(Hc_hsli,''val'')))']);
  
Hc_hcur = uicontrol(Hf_fig,'style','text',...
  'pos',[.91 .55 .08 .05],...
  'string',sprintf('%.2f',get(Hc_hsli,'val')));

Hc_hlabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.55 .49 .35 .05],...
  'string','Hue');

Hc_ssli = uicontrol(Hf_fig,'style','slider',...
  'pos',[.55 .43 .35 .05],...
  'min',0,'max',1,...
  'val',inithsv(2),...
  'callback',['rb=hsv2rgb(',...
      '[get(Hc_hsli,''val''),get(Hc_ssli,''val''),get(Hc_vsli,''val'')]);',...
    'set(Hc_nfr,''backgroundcolor'',rb),',...
    'set(Hc_ncur,''string'',sprintf(''[%.2f %.2f %.2f]'',rb)),',...
    'set(Hc_rsli,''val'',rb(1)),',...
    'set(Hc_rcur,''string'',sprintf(''%.2f'',rb(1))),',...
    'set(Hc_gsli,''val'',rb(2)),',...
    'set(Hc_gcur,''string'',sprintf(''%.2f'',rb(2))),',...
    'set(Hc_bsli,''val'',rb(3)),',...
    'set(Hc_bcur,''string'',sprintf(''%.2f'',rb(3))),',...
    'set(Hc_scur,''string'',sprintf(''%.2f'',get(Hc_ssli,''val'')))']);
  
Hc_scur = uicontrol(Hf_fig,'style','text',...
  'pos',[.91 .43 .08 .05],...
  'string',sprintf('%.2f',get(Hc_ssli,'val')));

Hc_slabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.55 .37 .35 .05],...
  'string','Saturation');

Hc_vsli = uicontrol(Hf_fig,'style','slider',...
  'pos',[.55 .30 .35 .05],...
  'min',0,'max',1,...
  'val',inithsv(3),...
  'callback',['rb=hsv2rgb(',...
      '[get(Hc_hsli,''val''),get(Hc_ssli,''val''),get(Hc_vsli,''val'')]);',...
    'set(Hc_nfr,''backgroundcolor'',rb),',...
    'set(Hc_ncur,''string'',sprintf(''[%.2f %.2f %.2f]'',rb)),',...
    'set(Hc_rsli,''val'',rb(1)),',...
    'set(Hc_rcur,''string'',sprintf(''%.2f'',rb(1))),',...
    'set(Hc_gsli,''val'',rb(2)),',...
    'set(Hc_gcur,''string'',sprintf(''%.2f'',rb(2))),',...
    'set(Hc_bsli,''val'',rb(3)),',...
    'set(Hc_bcur,''string'',sprintf(''%.2f'',rb(3))),',...
    'set(Hc_vcur,''string'',sprintf(''%.2f'',get(Hc_vsli,''val'')))']);
  
Hc_vcur = uicontrol(Hf_fig,'style','text',...
  'pos',[.91 .30 .08 .05],...
  'string',sprintf('%.2f',get(Hc_vsli,'val')));

Hc_vlabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.55 .24 .35 .05],...
  'string','Value');

%======================================================================
% Define the 'initial' color selector popup, and label it.
% The callbacks update the 'initial' color frame and value
% from the appropriate userdata entry.
%======================================================================

Hc_pcolor = uicontrol(Hf_fig,'style','popupmenu',...
  'pos',[.05 .05 .20 .10],...
  'backgroundcolor',[.7 .7 .8],...
  'string','Black|Red|Yellow|Green|Cyan|Blue|Magenta|White',...
  'userdata',[[0 0 0];...
              [1 0 0];...
              [1 1 0];...
              [0 1 0];...
              [0 1 1];...
              [0 0 1];...
              [1 0 1];...
              [1 1 1]],...
  'callback',[...
     'ud=get(Hc_pcolor,''userdata'');',...
     'set(Hc_ifr,''backgroundcolor'',ud(get(Hc_pcolor,''val''),:)),',...
     'set(Hc_icur,''string'',',...
       'sprintf(''[%.2f %.2f %.2f]'',get(Hc_ifr,''backgroundcolor'')))']);

Hc_pclabel = uicontrol(Hf_fig,'style','text',...
  'pos',[.05 .15 .20 .05],...
  'string','Initial Color');

%======================================================================
% Define the buttons for 'Copy', 'Cancel', and 'Done'.
% 'Copy' copies the 'initial' color to the 'new' color, and
% updates all the sliders and values appropriately.
%======================================================================

Hc_copypb = uicontrol(Hf_fig,'style','push',...
  'pos',[.55 .05 .12 .10],...
  'backgroundcolor',[.7 .7 .8],...
  'string','Copy',...
  'callback',[...
    'rb=(get(Hc_ifr,''backgroundcolor''));',...
    'set(Hc_nfr,''backgroundcolor'',rb),',...
    'set(Hc_ncur,''string'',sprintf(''[%.2f %.2f %.2f]'',rb)),',...
    'set(Hc_rsli,''val'',rb(1)),',...
    'set(Hc_rcur,''string'',sprintf(''%.2f'',rb(1))),',...
    'set(Hc_gsli,''val'',rb(2)),',...
    'set(Hc_gcur,''string'',sprintf(''%.2f'',rb(2))),',...
    'set(Hc_bsli,''val'',rb(3)),',...
    'set(Hc_bcur,''string'',sprintf(''%.2f'',rb(3))),',...
    'hv=rgb2hsv(rb);',...
    'set(Hc_hsli,''val'',hv(1)),',...
    'set(Hc_hcur,''string'',sprintf(''%.2f'',hv(1))),',...
    'set(Hc_ssli,''val'',hv(2)),',...
    'set(Hc_scur,''string'',sprintf(''%.2f'',hv(2))),',...
    'set(Hc_vsli,''val'',hv(3)),',...
    'set(Hc_vcur,''string'',sprintf(''%.2f'',hv(3)))']);
  
Hc_cancelpb = uicontrol(Hf_fig,'style','push',...
  'pos',[.70 .05 .12 .10],...
  'backgroundcolor',[.7 .7 .8],...
  'string','Cancel',...
  'callback',[...
    'close,return']);

Hc_donepb = uicontrol(Hf_fig,'style','push',...
  'pos',[.85 .05 .12 .10],...
  'backgroundcolor',[.7 .7 .8],...
  'string','Done',...
  'callback',[...
    'disp(sprintf(''Selected color: [%.4f %.4f %.4f]'',',...
      'get(Hc_nfr,''backgroundcolor''))),',...
    'close,return']);