source: MML/trunk/machine/SOLEIL/common/toolbox/GUILayout/+uiextras/interpretColor.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 10 years ago

Initial import--MML version from SOLEIL@2013

File size: 3.2 KB
Line 
1function col = interpretColor(str)
2%interpretColor  Interpret a color as an RGB triple
3%
4%   rgb = uiextras.interpretColor(col) interprets the input color COL and
5%   returns the equivalent RGB triple. COL can be one of:
6%   * RGB triple of floating point numbers in the range 0 to 1
7%   * RGB triple of UINT8 numbers in the range 0 to 255
8%   * single character: 'r','g','b','m','y','c','k','w'
9%   * string: one of 'red','green','blue','magenta','yellow','cyan','black'
10%             'white'
11%   * HTML-style string (e.g. '#FF23E0')
12%
13%   Examples:
14%   >> uiextras.interpretColor( 'r' )
15%   ans =
16%        1   0   0
17%   >> uiextras.interpretColor( 'cyan' )
18%   ans =
19%        0   1   1
20%   >> uiextras.interpretColor( '#FF23E0' )
21%   ans =
22%        1.0000    0.1373    0.8784
23%
24%   See also: ColorSpec
25
26%   Copyright 2005-2010 The MathWorks Ltd.
27%   1.1
28%   2012/05/08 08:02:58
29
30if ischar( str )
31    str = strtrim(str);
32    str = dequote(str);
33    if str(1)=='#'
34        % HTML-style string
35        if numel(str)==4
36            col = [hex2dec( str(2) ), hex2dec( str(3) ), hex2dec( str(4) )]/15;
37        elseif numel(str)==7
38            col = [hex2dec( str(2:3) ), hex2dec( str(4:5) ), hex2dec( str(6:7) )]/255;
39        else
40            error( 'UIExtras:interpretColor:BadColor', 'Invalid HTML color %s', str );
41        end
42    elseif all( ismember( str, '1234567890.,; []' ) )
43        % Try the '[0 0 1]' thing first
44        col = str2num( str ); %#ok<ST2NM>
45        if numel(col) == 3
46            % Conversion worked, so just check for silly values
47            col(col<0) = 0;
48            col(col>1) = 1;
49        end
50    else
51        % that didn't work, so try the name
52        switch upper(str)
53            case {'R','RED'}
54                col = [1 0 0];
55            case {'G','GREEN'}
56                col = [0 1 0];
57            case {'B','BLUE'}
58                col = [0 0 1];
59            case {'C','CYAN'}
60                col = [0 1 1];
61            case {'Y','YELLOW'}
62                col = [1 1 0];
63            case {'M','MAGENTA'}
64                col = [1 0 1];
65            case {'K','BLACK'}
66                col = [0 0 0];
67            case {'W','WHITE'}
68                col = [1 1 1];
69            case {'N','NONE'}
70                col = [nan nan nan];
71            otherwise
72                % Failed
73                error( 'UIExtras:interpretColor:BadColor', 'Could not interpret color %s', num2str( str ) );
74        end
75    end
76elseif isfloat(str) || isdouble(str)
77    % Floating point, so should be a triple in range 0 to 1
78    if numel(str)==3
79        col = double( str );
80        col(col<0) = 0;
81        col(col>1) = 1;
82    else
83        error( 'UIExtras:interpretColor:BadColor', 'Could not interpret color %s', num2str( str ) );
84    end
85elseif isa(str,'uint8')
86    % UINT8, so range is implicit
87    if numel(str)==3
88        col = double( str )/255;
89        col(col<0) = 0;
90        col(col>1) = 1;
91    else
92        error( 'UIExtras:interpretColor:BadColor', 'Could not interpret color %s', num2str( str ) );
93    end
94else
95    error( 'UIExtras:interpretColor:BadColor', 'Could not interpret color %s', num2str( str ) );
96end
97
98
99function str = dequote(str)
100str(str=='''') = [];
101str(str=='"') = [];
102str(str=='[') = [];
103str(str==']') = [];
Note: See TracBrowser for help on using the repository browser.