7.7 The GrayScale Visual
On a gray-scale workstation or a GrayScale
visual on a color workstation, a color application should still work
correctly. The only problem might be that when colors are allocated, the
closest physically possible colors (returned by
XAllocColor()) will result in shades of gray that
provide insufficient contrast. The best way to avoid this is to
explicitly check for the StaticGray visual. For true
bulletproof operation, it is a good idea to check any user-specified
colors to make sure they contrast.
The color names “gray0” through “gray100”, spelled with an “e” or
an “a”, can be used with XParseColor() to get RGB
values for various grays.
You should set the red, green, and blue values to be equal. Some servers only use one of the values, and others combine all three according to the NTSC standard that makes color television signals work on black-and-white televisions:
intensity = (.30 * red) + (.59 * green) + (.11 * blue)
MIT’s implementations use a least-squares algorithm that determines the closest RGB values in the (gray) colormap to the RGB values specified. Exactly what algorithm is used is up to the server implementor.