Reference Manual

  • 15.0
  • 07/23/2021
  • Public Content
Contents

Color Mixing

If you have a VGA machine, you are restricted to displaying at most 256 colors at a time. These 256 colors are held in a palette. You can choose the palette colors from a range of 262,144 colors (256K), but only 256 at a time. Some display adapters (most SVGAs) are capable of displaying all of the 256K colors and some (true color display adapters) are capable of displaying 256 * 256 * 256 = 16.7 million colors.
If you use a palette, you are restricted to the colors available in the palette. In order to access all colors available on your system, you need to specify an explicit Red-Green-Blue (RGB) value, not a palette index.
When you select a color index, you specify one of the colors in the system's predefined palette.
SETCOLOR
,
SETBKCOLOR
, and
SETTEXTCOLOR
set the current color, background color, and text color to a palette index.
SETCOLORRGB
,
SETBKCOLORRGB
, and
SETTEXTCOLORRGB
set the colors to a color value chosen from the entire available range. When you select a color value, you specify a level of intensity with a range of 0 - 255 for each of the red, green, and blue color values. The long integer that defines a color value consists of 3 bytes (24 bits) as follows:
MSB LSB BBBBBBBB GGGGGGGG RRRRRRRR
where R, G, and B represent the bit values for red, green, and blue intensities. To mix a light red (pink), turn red all the way up and mix in some green and blue:
10000000 10000000 11111111
In hexadecimal notation, this number equals #8080FF. To set the current color to this value, you can use the function:
i = SETCOLORRGB (#8080FF)
You can also pass decimal values to this function. Keep in mind that 1 (binary 00000001, hex 01) represents a low color intensity and that 255 (binary 11111111, hex FF) equals full color intensity. To create pure yellow (100-percent red plus 100-percent green) use this line:
i = SETCOLORRGB( #00FFFF )
For white, turn all of the colors on:
i = SETCOLORRGB( #FFFFFF)
For black, set all of the colors to 0:
i = SETCOLORRGB( #000000)
RGB values for example colors are in the following table.
RGB Color Values
Color
RGB Value
Color
RGB Value
Black
#000000
Bright White
#FFFFFF
Dull Red
#000080
Bright Red
#0000FF
Dull Green
#008000
Bright Green
#00FF00
Dull Yellow
#008080
Bright Yellow
#00FFFF
Dull Blue
#800000
Bright Blue
#FF0000
Dull Magenta
#800080
Bright Magenta
#FF00FF
Dull Turquoise
#808000
Bright Turquoise
#FFFF00
Dark Gray
#808080
Light Gray
#C0C0C0
If you have a 64K-color machine and you set an RGB color value that is not equal to one of the 64K preset RGB color values, the system approximates the requested RGB color to the closest available RGB value. The same thing happens on a VGA machine when you set an RGB color that is not in the palette. (You can remap your VGA color palette to different RGB values; see VGA Color Palette.)
However, although your graphics are drawn with an approximated color, if you retrieve the color with
GETCOLORRGB
,
GETBKCOLORRGB
, or
GETTEXTCOLORRGB
, the color you specified is returned, not the actual color used. This is because the
SETCOLORRGB
functions do not execute any graphics, they simply set the color and the approximation is made when the drawing is made (by
ELLIPSE
or
ARC
, for example).
GETPIXELRGB
and
GETPIXELSRGB
do return the approximated color actually used, because
SETPIXELRGB
and
SETPIXELSRGB
actually set a pixel to a color on the screen and the approximation, if any, is made at the time they are called.

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.