Simply convert between hex color values and rgb color values. These two functions can handle arrays as inputs. Default rgb values are scaled from 0 to 1 to match Matlab's syntax. However, if you'd like to use RGB values scaled from 0 to 255, that'll work too.
SYNTAX:
rgb = hex2rgb(hex) returns rgb color values in an n x 3 array. Values are scaled from 0 to 1 by default.
rgb = hex2rgb(hex,255) returns RGB values scaled from 0 to 255.
* * * * * * * * * * * * * * * * * * * *
EXAMPLES:
myrgbvalue = hex2rgb('#334D66')
= 0.2000 0.3020 0.4000
myrgbvalue = hex2rgb('334D66') % <-the # sign is optional
= 0.2000 0.3020 0.4000
myRGBvalue = hex2rgb('#334D66',255)
= 51 77 102
myhexvalues = ['#334D66';'#8099B3';'#CC9933';'#3333E6'];
myrgbvalues = hex2rgb(myhexvalues)
= 0.2000 0.3020 0.4000
0.5020 0.6000 0.7020
0.8000 0.6000 0.2000
0.2000 0.2000 0.9020
myhexvalues = ['#334D66';'#8099B3';'#CC9933';'#3333E6'];
myRGBvalues = hex2rgb(myhexvalues,255)
= 51 77 102
128 153 179
204 153 51
51 51 230
********************************************************
THE OTHER FUNCTION
********************************************************
SYNTAX:
hex = rgb2hex(rgb) returns the hexadecimal color value of the n x 3 rgb values. rgb can be an array. This function assumes rgb values are in [r g b] format on the 0 to 1 scale. If, however, any value r, g, or b exceed 1, the function assumes [r g b] are scaled between 0 and 255.
* * * * * * * * * * * * * * * * * * * *
EXAMPLES:
myhexvalue = rgb2hex([0 1 0])
= #00FF00
myhexvalue = rgb2hex([0 255 0])
= #00FF00
myrgbvalues = [.2 .3 .4;
.5 .6 .7;
.8 .6 .2;
.2 .2 .9];
myhexvalues = rgb2hex(myrgbvalues)
= #334D66
#8099B3
#CC9933
#3333E6
Chad Greene (2021). rgb2hex and hex2rgb (https://www.mathworks.com/matlabcentral/fileexchange/46289-rgb2hex-and-hex2rgb), MATLAB Central File Exchange. Retrieved .
Inspired by: rgbconv.m, Grayscale to RGB Converter, COLORMAP and COLORBAR utilities (Jul 2014), Beautiful and distinguishable line colors + colormap, hextorgb, HEX2RGB
Inspired: BiofilmQ, colorpicker, Intuitive RGB color values from XKCD, rgbmap color maps, Murphy Diagrams, image2palette: Simple K-means color clustering
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Create scripts with code, output, and formatted text in a single executable document.
I understand now. Roundoff from 1-255 range.
The reverse function does not always return the original value. What am I missing?
rgbv=[0.4375 0.5000 0.5625];
hex = rgb2hex(rgbv);
rgbv2= hex2rgb(hex);
ACheck=rgbv-rgbv2
ACheck = -0.0017 -0.0020 0.0017
thanks
Stephen: you have given a perfect example of how feedback can be great without being good. Thank you for your thoughtful, helpful suggestions--I have incorporated them into the latest update.
Does what it says on the box. Clearly written, several helpful examples, with help text and an H1 line. I like the style: the author has provided relevant usage information to the end-user, and makes it clear that they have tried to make it useful, although the 'See also' line is a bit brief: "num2str", "sscanf", "dec2hex" as well, maybe?
The code could have a few tweaks to make it tidier, as the mlint message indicates...
- "hex2rgb" splits up the input matrix into separate vectors and parses these with "hex2dec", before merging these back together later. Keeping the matrix together makes it simpler and faster:
rgb = reshape(sscanf(hex.','%2x'),3,[]).';
- "hex2rgb" uses "exist" for the optional argument, "nargin" is faster.
- "rgb2hex" calls multiple "sprintf" instances within a "for" loop without any array preallocation: this will be slow for large inputs, but could be replaced with one call to "sprintf" and no loops (vectorized!):
hex(:,2:7) = reshape(sprintf('%02X',rgb.'),6,[]).';
hex(:,1) = '#';
Five stars for the help and clarity, three stars for the code.