File Exchange

## rgb2hex and hex2rgb

version 1.1.1 (53.4 KB) by Chad Greene

Convert colors between rgb and hex values

Updated 20 May 2019

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

### Cite As

Chad Greene (2020). rgb2hex and hex2rgb (https://www.mathworks.com/matlabcentral/fileexchange/46289-rgb2hex-and-hex2rgb), MATLAB Central File Exchange. Retrieved .

Stefan Dukic

Ethan Kyzivat

tee xu

### tee xu (view profile)

Giorgio Balestrieri

Bo Yang

### Bo Yang (view profile)

Stephen Cobeldick

### Stephen Cobeldick (view profile)

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.

Stephen Cobeldick

### Stephen Cobeldick (view profile)

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.