# RGB565 RGB565 is color format, or a way of representing [colors](color.md) with just 2 [bytes](byte.md) (unlike traditional 24 bit RGB formats that use 3 bytes, one for each component), that is 16 [bits](bit.md) (giving a total of 65536 distinct colors), by using 5 bits (highest) for red, 6 bits for green (to which human eye is most sensitive) and 5 bits for blue; it can also be seen as a color [palette](palette.md). It is similar to [rgb332](rgb332.md) -- it's basically a mid way between RGB332 and full 24bit RGB against which it saves one byte per pixel, but compared to RGB332 [byte sex](byte_sex.md) comes to play here. Practically speaking you will rarely need anything more than this, 65 thousand colors are absolutely sufficient for everything. Yet another similar format to this one is [RGB555](rgb555.md) which sacrifices one useful bit for gaining the nice property of having the same size of each component. Here is a [C](c.md) code for the basic conversions to/from this format: ``` unsigned int rgbTo565(unsigned char red, unsigned char green, unsigned char blue) { return (((unsigned int) (red / 8)) << 11) | (((unsigned int) (green / 4)) << 5) | (blue / 8); } void rgbFrom565(unsigned int colorIndex, unsigned char *red, unsigned char *green, unsigned char *blue) { unsigned char value = colorIndex >> 11; *red = value != 31 ? value * 8 : 255; value = (colorIndex >> 5) & 0x3f; *green = value != 63 ? value * 4 : 255; value = colorIndex & 0x1f; *blue = value != 31 ? value * 8 : 255; } ``` There exist nice tricks you can do with colors represented this way, like quickly divide all three R, G and B components by a power of two just by doing one bit shift and logical [AND](and.md) to zero the highest bits of the components, or approximating addition of colors with logical [OR](or.md) and so on -- for details see the article on [RGB332](rgb332.md).