File Exchange

## rgb2hex and hex2rgb

version 1.1.1 (53.4 KB) by
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 (2021). rgb2hex and hex2rgb (https://www.mathworks.com/matlabcentral/fileexchange/46289-rgb2hex-and-hex2rgb), MATLAB Central File Exchange. Retrieved .

Niels De Witte

Does what is says.

Jules Martin

Petter Stridbeck

Xingwang Yong

Dwayne Bourgoyne

I understand now. Roundoff from 1-255 range.

Dwayne Bourgoyne

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

Stefan Dukic

Ethan Kyzivat

tee xu

Giorgio Balestrieri

Bo Yang

Stephen Cobeldick

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

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.

##### MATLAB Release Compatibility
Created with R2012b
Compatible with any release
##### Platform Compatibility
Windows macOS Linux